关于误差!高人请进!

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:59:33
关于有效数字的缺失:
比如:0.333333*10^2 - 0.333332*10^2 = 0.000001*10^2 = 0.1*10^-3

有效数字从6位一下变到了1位,
这样会产生什么样的误差?
麻烦知道的人帮忙说明一下.最好能举例说明下.谢谢!
是程序中.....

看你拿这个干什么了……
如果是科学计算的话,可能造成其后的所有运算精度不够。比如在化学物理中……因为这些测量本身就不说100%精确的,也就是说0.10!=0.1
比如有一把秤,它能精确到0.1,那么这时候一个物体你用这个得到的重量是1.2,然后又有另一把,精确度是0.01,那你得到的就可能是1.22了。这时候1.22和1.2其实表示的是一个物体
但是如果你用1.20的话,就会认为这个数据的精确度是0.01,那么就很有可能是两个物体了!
所以在科学计算中,你上面写的这个等式其实是错误的!因为这个运算的结果最终应该是6位有效数字,而不是1位!
如果你是数学计算的话,那么我告诉你,完全相同!
程序中又怎么了,关键是你这个程序是拿来干什么的……
而且程序存的其实是一个东西,只是你输出的时候调整了精度而已。
也就是说,在程序中你每一次运算都是按照系统的最大精确度进行的(注意,是最大精确度,也就是说,你输入2.9未必是2.9,可能程序中实际存的是2.88888888889这样子,这就要看你用什么类型存储了,double的精度会比float高很多倍!)
所以程序中不需要去注意精度的问题,你只需要在最后输出的时候按照你实际的需求输出一定的精确度或者有效位数就可以了
如果你一定要打到化学或者物理的那样计算方法,那么你只能选择自己写一个四则运算的方法……
或者也许有一些扩展的库可以支持这种运算。因为这时候其实是不能用double或float来运算,你需要用一个str来存储每个值。只有这样,3.00才是3.00而不可能变成2.9999999999999997