有些重复:
1.265 * 10000 = 126499.99999999999 ?????
How is floating point stored? When does it matter?
Strange floating-point behaviour in a Java program
Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?
Error in Flash addition
我将23除以40(23/40)。在C中,该操作结果为0.5749999999999996。但实际上它必须是0.575!
我该如何解决这个问题?
答案 0 :(得分:4)
这是存储浮点数的工件。
你可以绕回答sprintf(“%。3f”,结果)或使用一些十进制处理包。
答案 1 :(得分:4)
看看这个 - 它应该告诉你关于Why Computers Suck At Math
需要知道的一切答案 2 :(得分:4)
问题是因为.575值在浮点编码中没有精确表示。修复取决于您必须处理的值以及不准确性的影响。
如果只是显示问题,请使用舍入到3位小数,然后得到0.575。
如果是因为计算不准确,请尝试将值保持为精确的分数。您将必须存储和处理两个浮点值,但它将是准确的。当需要结果时,将有效除法推迟到最后一刻。
检查两个值之间的差异是否与您的问题相关。例如,将sqrt epsilon减去该值,并检查更改对最终计算结果的影响程度,并将其与所需或所需的精度进行比较。
不幸的是,我们必须忍受浮动中实际值表示的限制。使用128位精度浮点数会使误差小得多,但不会为空。
答案 3 :(得分:2)
我建议你在网上搜索“浮点准确度”,或者查看关于你的其他几十个问题,你的问题是重复的。
答案 4 :(得分:2)
使用floating point算术是正常的。您可以使用%.3g更改 float 和 double 的打印方式,例如
答案 5 :(得分:2)
你无法解决这个问题。并非所有数字都可以表示为浮点数,请参阅"how is floating point stored, when does it matter"。