『电脑科学由於硬体的限制,存在计算的误差。从同一道数学问题,透过
程序解与手动解析解来观察此一现象最为显着。以下将以半径为1的单位圆内接
正多边形的周长,反推圆周率 π 来说明。』
圆内接正多边形的面积、周长公式如下图:(注)
『当 n 无限增大,周长除以 2r 所得到的值,必定随着 n 增加而增加。 而最终的极限值恰好就是 π。』
可是透过电脑程序的数值解,上述的描述依旧正确吗?
以下在Repl.it上进行测试。
// π 本身就是超越数,以下限定计算式中用到pi值为-1的反余弦
double arccos2pi = Math.acos(-1.);
在此就定义在Repl.it执行环境上的正确 π 值为
xxxxxx-circle : 3.141592653589793
以下将观察正 n 边形周长除以 2r 後所得到的 π 值与上述 xxxxxx-circle 值进行比较。
double perimeter4radius1circle2pi;
for (int n=最大边数; n>(最小边数-1); --n) {
// 简化计算式,令 r=1
perimeter4radius1circle2pi=n*Math.sin(arccos2pi/n);
System.out.println(n+"-circle : " + perimeter4radius1circle2pi);
}
观察正三角形至正九边形的结果:
随着边数增加,依照多边形反推计算所得的 π 值越大,越接近 xxxxxx-circle。
目前手算与电脑算都能遵守我们习以为常的数学观点。
但是,到了 n = 249981 後,
『随着边数的增加,所计算出来的 π 值越大的这个规律已经出现问题了。』
甚至到了 n = 999999 时,数值反而又离 xxxxxx-circle 又误差更大了。
这时候手算因为有效位数能无限延伸,反而没有此一问题。
『人脑还是比电脑强!』
不过,好消息是,当我们给 n = 2147483647
时,确实就得到 xxxxxx-circle 的值了。
上述案例,当边数超过某特定值後,所得到的计算值不一定是正确值。直到
给予 int 在电脑上的极限值 2147483647,透过周长反推所计算出的 π
值与 Math.acos(-1) 所得到的值ㄧ致。
2021年,随着元宇宙(Metaverse)
、NFT
、...,这类 Web 3.0 的服务相继崛起。
在分散式的架构下,这类的问题将会越来越显着。
以 Kubernetes
为例,当所有的分散系统透过 Deployment
、Stateful set
、Pods
来实现後,在对所有服务设定 『memory request/limit
』 的限制下,如
何去测试出在对应的资源中,一些数值的运算极限值,将会大大的影响执行结果及正确性。
真正的困难点在於程序设计师在 Unit Test 的过程中,能否进一步找出
memory request/limit 的合理值,使得在有限的节点上,水平扩展的过程中,所有服
务皆能计算得到可预期的正确结果。
不过『说』还是比较简单,实际并不容易『做』到。
只能自身技能再提升,
(注)圆内接正多边形参考网址-https://www.efunda.com/math/areas/PolygonInscribedGen.cfm
>>: DE2_115(DAY1)以niosii去控制板子上的led灯
1.【WordPress 付费主题免费下载】Sentobar — Barbershop WordPr...
除了使用 DSL 的方式和资料库进行互动之外,我们还可以透过更加物件导向的方式,来和资料库进行沟通。...
虽然 Hexo 要完成架设 Blog 仅仅是几秒钟的时间就完成,但是在细部调整时还是会遇到不少困难,...
背景图片 background-image:使用 url(pic路径) 来显示图片 backgrou...
初探 LeetCode 的操作与使用 注册登入 LeetCode 之後,可以从 Problems ...