gpt4 book ai didi

java - 为什么结果不同? float 与 double

转载 作者:行者123 更新时间:2023-12-01 19:28:42 24 4
gpt4 key购买 nike

System.out.println(0.1F + 0.2F); // 0.3
System.out.println(0.1D + 0.2D); // 0.30000000000000004

我理解了 0.1D + 0.2D ~= 0.30000000000000004。
但我猜这些结果是相同的,但事实并非如此。
为什么结果不同?

最佳答案

为什么结果不同?

一般意义上:

  • 因为 floatdouble 的二进制表示不同。
  • 因此,十进制和二进制浮点表示形式之间的差异(错误)在 floatdouble 中可能会有所不同。
  • 当各个数字的表示误差不同时,计算后的误差也可能不同。

在将十进制数转换为二进制数、进行算术运算以及将二进制数转换回十进制数以打印数字时,错误可能会蔓延和/或复合。它们对于实际计算机上涉及实数和有限数值表示的所有计算来说是固有的/不可避免的。

要获得更广泛的治疗,请阅读:Is floating point math broken?

<小时/>

现在,如果您愿意,您可以检查此处数字的二进制表示形式,并准确找出此处发生错误的位置:

  • 十进制->二进制浮点转换
  • 在浮点运算中
  • 在二进制浮点转换->十进制转换中,
  • 或以上一项以上。

如果您确实想深入研究它,我建议您看一下 Float.floatToRawBits 方法及其 double 模拟。这些将允许您检查二进制浮点表示。然后,您可以手动将它们转换为精确实数,并计算出与“理想”十进制表示形式相比的误差。

这很乏味。

关于java - 为什么结果不同? float 与 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60462330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com