noivan 发表于 2010-10-4 11:26:37

9860GII OS的Bug!(最新发现)

拿起你手中的9860,运行imath的2D-Math7,输入根号2+根号6进行计算结果非常令人吃惊,居然没有算出来?
然而实际上这并不是2D-Math系列算法的问题
其实是。。。
请看下图
在第一张图中引用了2D-MATH计算双排根号中的一步,N、Q的值如图可见,分别是8和48,那么计算第一行的结果是4,并没有问题可当我们对这个算式取整数部分(Int),奇怪的事情出现了,“4”的整数部分居然是3,而取分数部分却是1,明显不符常理!
我们在下图中对数字4取整数部分,发现结果正常
综上所述,我们很容易便可得出一个结论,那就是第一个算式的结果并不是我们所常见的4!其实是一个像3.999999999998这样的数字,计算器在显示的时候取了前9位,发现后面还有数字,就进行了进位,于是显示出了结果4!(计算器内部计算的时候应该是15位精度计算)

我认为这个Bug的出现时计算器开方算法和显示时对内部精度处理所导致的
这个Bug的结果就使一些看似正常的计算得出了异常结果,也就出现了开头的2D-Math竟然无法计算简单的双排根号问题

2D-MATH系列问题的解决:在计算上述算式时,对计算结果RndFix保留9个精度,这样就不会出现无法计算的问题了

我相信勤奋体贴的CASIO一定可以在即将到来的新OS中解决这个问题!谢谢了!

注意:附图中最后两张图片是经修改过的2D-MATH7使用示例

imath 发表于 2010-10-4 11:40:58

..............int()...
........还是用RndFix()函数
但是那个单独的Rnd函数有何作用

noivan 发表于 2010-10-4 11:51:43

摘自9860说明书

{ Rnd } ... {将用于内部计算的数值四舍五入至10个有效位(与答案存储器中的数值相符),或者
四舍五入至您指定的小数位数(Fix)和有效位数(Sci)}
{ RndFi } ... {将用于内部计算的数值四舍五入至指定数位(0至9)(参见第2-2页)。}

noivan 发表于 2010-10-4 11:53:44

对比差别就知道Bug产生的原因啦

imath 发表于 2010-10-4 12:08:11

摘自9860说明书

{ Rnd } ... {将用于内部计算的数值四舍五入至10个有效位(与答案存储器中的数值相符),或者
四舍五入至您指定的小数位数(Fix)和有效位数(Sci)}
{ RndFi } ... {将用于内部计算的数值四舍五 ...
noivan 发表于 2010-10-4 11:51 http://www.cncalc.org/images/common/back.gif
似乎rnd 也行。。。。

noivan 发表于 2010-10-4 12:53:41

目前问题就是未显示出来的第10位是否会对结果造成影响呀
还是RndFix更好点

imath 发表于 2010-10-4 17:48:53

感觉rnd更正统

yzhang37 发表于 2010-10-5 00:47:22

所以我编写的程序绕开了这个问题。
页: [1]
查看完整版本: 9860GII OS的Bug!(最新发现)