octopussheng 发表于 2007-8-20 09:43

回复 #15 sssssxxxxx921 的帖子

呵呵,其实也不会太牵强了,主要还是计算机自身计算能力的一种体现嘛!

花如月 发表于 2007-8-20 09:46

回复 #15 sssssxxxxx921 的帖子

为什么不是零,可以肯定是误差在作怪。不管是否牵强,书上就是这么解释的。应该是有道理的
顺序对有效位数的影响:
>> format long
>> (1.0799+0.0381)-(0.3686+1.2376)+0.4882

ans =

    5.551115123125783e-017
楼主在4楼给的结果是:
0.0381-0.3686+1.0799-1.2376+0.4882

ans =

5.5511e-017

大概损失了10多位的有效数字
正在找可以等于零的方法、、、、

花如月 发表于 2007-8-20 09:50

找到了
>> format long
>> a=1.0799+0.0381

a =

   1.11800000000000

>> b=a+0.4882

b =

   1.60620000000000

>> result=b-(0.3686+1.2376)

result =

   0
说白了还是截断和舍入误差在作怪

花如月 发表于 2007-8-20 09:53

最后在牢骚一下,书上的一些基础研究可信度还是有的:lol。书上既然有对有效数字位数和绝对误差的分析说明,也是有道理的。同样一个计算式子分布计算可以得到零,而连在一起就不是零。确实有些奇怪,这是数值计算难以避免的误差。如果想精确就需要自己设计不同的方法(比如这个例子)。在matlab曾经有一个版友问过这个问题sin(0)的结果是零,但是sin(pi)确不是(可以试试看,想想为什么呢?)。其实也很简单,pi是个什么数呀?那可是无限小数啊。计算机能准确表达么?所以结果只能是近似解,和理论解0存在误差是必然的。想让sin(pi)为零也有很多不同的方法,感兴趣的可以看一下这个帖子:
sin(pi)不等于0
感谢2位版主的鼓励,特别是小咕姐的信任:loveliness: ,以后俺们版有事也找你们

[ 本帖最后由 花如月 于 2007-8-20 10:06 编辑 ]

咕噜噜 发表于 2007-8-20 10:09

回复 #19 花如月 的帖子

^_^,版块之间要互相交流,版主之间更要相互交流啊
花如月有时间记得常过来看看

sssssxxxxx921 发表于 2007-8-20 10:41

谢谢你的详解   这些我也猜到一点点   
只是很好奇   也很想知道计算机是怎么进行舍入计算的想知道中间过程可懒得查资料呵呵

gladstone 发表于 2007-8-20 10:42

大家讨论浮点数的,可能存在计算机舍入误差问题。但是整数的,还有一个有意思的:
0=0+0+0+0.......
0=(1-1)+(1-1)+(1-1)+(1-1)+.......
1-1+1-1+1-1+1-1+.........≠0

octopussheng 发表于 2007-8-20 15:43

关于这个误差讨论确实是蛮有意思和意义的

都知道是计算机计算时有效位数以及截断误差造成的原因,但是原理还是有点模糊的,花如月上面总结的还是很好的,也希望大家继续讨论讨论这个话题!争取得到一些有意思的结论哦!

咕噜噜 发表于 2007-8-20 16:23

这个还是软件本身的问题,通过设置是可以消除的
在计算中注意设置问题应该没问题
不过还是很喜欢讨论这类有意思的东西

sssssxxxxx921 发表于 2007-9-3 17:12

计算机中存储数据都是以2的K次幂来输入的,所以才会显示上述的误差现象
页: 1 [2]
查看完整版本: 看看这个等于零的问题