关于同一个程序浮点运算,不同计算机上结果不同问题 ( 积分: 100 )

  • 主题发起人 主题发起人 LeoSue
  • 开始时间 开始时间
L

LeoSue

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个程序,用浮点进行运算,运算完毕之后formatfloat成小数点儿后两位。很普通的写法,就是formatfloat(a*b/c...,#.00),但是经过一段时间运行之后,同一个exe程序,在不同机器上,一定情况下运行结果不同,往往发生在33.645,77.825也就是有0.0005需要舍入的情况下。
在a*b/c等于33.645的情况下,A机器可能时33.65,B机器可能是33.64。
而把数据33。645直接formatfloat,就不会出现这种现象。
高人说,可能是最后的0.005使用0.0049999999999999999表示的,我不明白为什么会这样,哪位高人碰到过,如何解决呢?
 
我有一个程序,用浮点进行运算,运算完毕之后formatfloat成小数点儿后两位。很普通的写法,就是formatfloat(a*b/c...,#.00),但是经过一段时间运行之后,同一个exe程序,在不同机器上,一定情况下运行结果不同,往往发生在33.645,77.825也就是有0.0005需要舍入的情况下。
在a*b/c等于33.645的情况下,A机器可能时33.65,B机器可能是33.64。
而把数据33。645直接formatfloat,就不会出现这种现象。
高人说,可能是最后的0.005使用0.0049999999999999999表示的,我不明白为什么会这样,哪位高人碰到过,如何解决呢?
 
不同类型的CPU在浮点运算精度上是不同的.
 
请使用精确度高的变量。
 
是同一种类型cpu,我们机器统一购置的。后来的解决方法是把那些所有机器格式化,装同一个操作系统。然后出的数据就一样了。看来和cpu没有关系;
同事和精度的关系也不大。我用的是double。运算的时候只要有浮点儿,就可能产生这个问题。而且数据不是很大。根本不用扩展精度。
 
可能是你的变量使用了double,但是在一些隐性转换的时候变成了普通的real型,试试对每一个参与运算的量(包括常量和变量)强制转为double型试试
学了C之后,以前delphi是怎么转化的都忘了,汗一个-_-!
 
后退
顶部