双重计算产生奇数结果

Rog*_*ger 3 java floating-point double

我有2个数字存储为Double,1.4300和1.4350.当我减去1.4350 - 1.4300时,它给出了结果:0.0050000000000001155.为什么它会在最后添加1155,如何解决这个问题,使其返回0.005或0.0050?我不确定舍入是否有效,因为我使用的是2和4的十进制数.

Jac*_*erk 13

哦,我喜欢这些...这些都是由双重表示中的不准确引起的,浮点运算充满了这些.它通常由二进制中的重复数字(即base-2浮点表示)引起.例如,在十进制1/3 = 0.3333'中,二进制1/10是一个重复数字,这意味着它不能完美表示.试试这个:1 - 0.1 - 0.1 - 0.1 - 0.1.你不会得到0.6 :-)

要解决这个问题,请使用BigDecimal(首选)或通过先将其乘以10000之类的方法来操纵double,然后将其四舍五入然后再将其分割(不太干净).

好问题......它在过去造成了巨大的问题.导弹过冲目标,卫星在发射后坠毁等.在网上搜索一些,你会惊讶的!

  • http://ima.umn.edu/~arnold/455.f96/disasters.html以及http://www.theinquirer.net/inquirer/news/1047844/floating-point-bugs-explode(仅两个我能找到...) (6认同)