sssssxxxxx921 发表于 2007-8-19 15:21

看看这个等于零的问题

0.0381-0.3686+1.0799-1.2376+0.4882
在上面的式子中变换一下加减位置   你就会得到不同的结果 (结果本应该是0)
难道这个加减法加减中   计算机也会进行舍入误差运算

咕噜噜 发表于 2007-8-19 15:54

可能是有效位数的问题,但是结果是零肯定没错

wanyeqing2003 发表于 2007-8-19 16:17

都是零呀!

sssssxxxxx921 发表于 2007-8-19 16:26

回复 #3 wanyeqing2003 的帖子

不会吧   我这几个机子都是这的
0.0381-0.3686+1.0799-1.2376+0.4882

ans =

5.5511e-017

>> -1.2376-0.3686+1.0799+0.4882+0.0381

ans =

3.4694e-017

咕噜噜 发表于 2007-8-19 18:31

是有点奇怪,按道理说每个数都没有那么多有效数字

无水1324 发表于 2007-8-19 18:42

不错,这个都被你发现了,只是这个在什么情况下,对于我们的结论有影响?还是matlab提供的最高精度是多少?

sssssxxxxx921 发表于 2007-8-19 19:06

这是同学问我的问题    我觉得很奇怪   虽说我觉得这根本不影响计算结果
但还是把这个有意思的 问题 搞清楚比较好

咕噜噜 发表于 2007-8-19 19:26

可能matlab版块的高手更清楚,呵呵
这个问题是有意思,拉花如月来看看

sssssxxxxx921 发表于 2007-8-19 20:00

这个问题计算机研究生专业的估计可以解释一下吧

octopussheng 发表于 2007-8-19 21:18

这个还是和matlab的数据格式有关系的!呵呵

sssssxxxxx921 发表于 2007-8-19 21:31

详细说说

octopussheng 发表于 2007-8-20 07:51

如果你打开一个workspace,然后在view菜单栏里面找到一个formta的菜单,有好几个选项,我就记得这么几个:long,short,short E等等,试着改变一下数据格式,看看会有什么结果,特别是在你运算后得到的结果

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

个人对这个问题的看法:
这个结果不同完全是因为“舍入误差”的影响!
舍入误差的定义:由于电子数字计算机只能将数字数表示成有限位进行运算,所以对超过位数的数字要按一定的规则作舍入,由此产生的误差称为舍入误差。12楼的方法是可以在改变数字表示位数的情况下改善结果的精度,但是治标不治本(即使long double类型的数字在计算机内好像只用32bit进行表示)

这个问题是数值计算的基本问题。数值计算就是利用数字计算机进行计算,产生的误差来源有:模型误差,观测误差,截断误差和舍入误差。通常情况下只考虑和研究后两种对结果的影响

数值计算中应注意的一个原则
(1)用数值稳定性好的计算方法,以便控制舍入误差的传播
(2)两个数量级相差很大的数字进行加减运算时,要防止小的那个数加减不到大的数中所引起的严重后果
(3)避免两个相近的数相减,以免严重损失有效数字
(4)在除法中,避免除数的绝对值远小于被除数的绝对值。
(5)防止出现机器零和溢出死机
(6)简化计算步骤,减少运算次数
在楼主给出的式子里,是数值计算的一个基本问题。由于顺序不同所得结果的绝对误差限是不同的,也就是说有效位数不同,甚至会出现有效数字为0的结果(无意义)。所以用数值计算的时候即使最简单的加减法也是需要设计合理的计算策略和步骤以得到相对准确的结果

注意(2)和(3)2两条就可以搞定你的那个问题了。
相关概念:误差估计,算法稳定行分析,条件数、、
参考资料:高等工程数学(第三版)研究生用书于寅 华中科技大学出版社

花如月 发表于 2007-8-20 08:55

可都是敲上去的,累、、、
这个就是那本书上的一个例子,为了说明计算中结果有效数字的位数的重要性。肉眼都可以看出结果是零,而用计算机却得出不同的结果。也给搞研究的人一个警钟:不要太相信计算的结果,这么一个简单的问题都会出错,何况十分复杂的系统和算式?所以研究误差的传播,计算的技巧也就是十分重要。

实际的研究过程中,有多少的方法都是理想化的、简化的。许多问题我们研究的很久依然搞不清楚,也就很容易理解了。记得香港科大的一个教授在做报告的时候就说过,水滴沿斜面的的运动就很难分析(存在滑动和滚动之争,这可是生活中十分常见的现象呢)

sssssxxxxx921 发表于 2007-8-20 09:04

觉得理由还是有点牵强   呵呵呵
页: [1] 2
查看完整版本: 看看这个等于零的问题