关于visual studio:在C中划分的奇怪结果

Strange result of division in C

本问题已经有最佳答案,请猛点这里访问。

Some Duplicates:
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

结果40分(23×23/40)。在C中0.5749999999999996 this operation结果。but must be 0.575真爱!P></

本技术可以修复吗?P></


问题在于.575值在浮点编码中没有精确的表示。修复取决于您与值的关系以及不准确的影响。

如果只是一个显示问题,使用四舍五入到3位小数,您将得到0.575。

如果是因为计算不准确,请尝试将该值保留为精确的分数。您将必须存储和处理两个浮点值,但它将是精确的。把有效的划分推迟到你需要结果的最后时刻。

检查这两个值之间的差异是否与您的问题相关。例如,将sqrt epsilon减去该值,检查更改对最终计算结果的影响程度,并将其与所需或所需的精度进行比较。

不幸的是,我们必须忍受浮动中真实值表示的限制。使用128位精度的浮点将使错误小得多,但不能为空。


看看这个-它应该告诉你你需要知道的一切关于为什么计算机在数学上很差劲


这是一个如何存储浮点数字的人工制品。

您可以四舍五入回答sprintf("%.3f",result)或使用一些十进制处理包。


你不能解决这个问题。并非所有数字都可以表示为浮点数,请参阅"浮点数是如何存储的,它什么时候重要"。


浮点运算是正常的。例如,您可以使用%.3g更改浮动和双精度打印的方式。


我建议你在网上搜索"浮点精度",或者看看其他绝对的几十个问题,这样你的问题就是一个副本。