double类型计算误差

时间:2022-07-10 16:08:35


double类型的值在*10、*100、*1000等运算中的存在误差。
0.00162975*10000应该等于1.62975但是计算结果却是1.6297499999999998


在c、vb等语言中不会有这个错误

10 个解决方案

#1


你试过c,vb里面没有误差?
java也有不会出误差的类.java.math.BigDecimal

#2


浮点运算有误差是 任何一台计算机都会出现的问题,因为二进制表示小数本来就是有误差的,除非计算机不用二进制.不过这样的计算机现在还不存在:)

#3


一点点误差是合理的嘛!

#4


他的精度太高,而且数字哪怕是在使用手动计算乘法时的小数点移位利用加法器也使难以实现的,这样加法器结果当然不会很准确

c在控制os使得计算结果有所优化,不是说java不准确,他离os确实太远了

#5


误差是有的,看你精确到几位了。

#6


误差是难免的但是几种语言计算结果是不一样的。
我在c、vb中均试过了都不会出项这样的问题。

#7


因为浮点数在计算机中使用二机制表示
就像在10进制中你怎么表示1/3,只能是0.33333333......
所以会产生这种误差
如果要精确的计算,要用BigDecimal

#8


是啊。
在合理的误差范围之内是允许的。


^@^

#9


昨天看过一本书.microsoft在奔腾处理芯片刚刚上市的时候就存在计算浮点的bug.
大家还是好好研究一下!

#10


是个值得注意的问题

#1


你试过c,vb里面没有误差?
java也有不会出误差的类.java.math.BigDecimal

#2


浮点运算有误差是 任何一台计算机都会出现的问题,因为二进制表示小数本来就是有误差的,除非计算机不用二进制.不过这样的计算机现在还不存在:)

#3


一点点误差是合理的嘛!

#4


他的精度太高,而且数字哪怕是在使用手动计算乘法时的小数点移位利用加法器也使难以实现的,这样加法器结果当然不会很准确

c在控制os使得计算结果有所优化,不是说java不准确,他离os确实太远了

#5


误差是有的,看你精确到几位了。

#6


误差是难免的但是几种语言计算结果是不一样的。
我在c、vb中均试过了都不会出项这样的问题。

#7


因为浮点数在计算机中使用二机制表示
就像在10进制中你怎么表示1/3,只能是0.33333333......
所以会产生这种误差
如果要精确的计算,要用BigDecimal

#8


是啊。
在合理的误差范围之内是允许的。


^@^

#9


昨天看过一本书.microsoft在奔腾处理芯片刚刚上市的时候就存在计算浮点的bug.
大家还是好好研究一下!

#10


是个值得注意的问题