Why different result? float vs double(为什么结果不同?浮动VS双精度)
本文介绍了为什么结果不同?浮动VS双精度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
System.out.println(0.1F + 0.2F); // 0.3
System.out.println(0.1D + 0.2D); // 0.30000000000000004
我理解为0.1D+0.2D~=0.30000000000000004。
但我猜这些结果是一样的,但事实并非如此。
为什么结果不同?
推荐答案
结果为何不同?
一般意义上:
- 因为
float
和double
的二进制表示形式不同。 - 因此,十进制和二进制浮点表示之间的差异(误差)在
float
与double
中可能不同。 - 当各个数字的表示误差不同时,计算后的误差可能会有所不同。
在将十进制数转换为二进制数、进行算术运算以及将二进制数转换回十进制数以打印数字时,可能会出现错误和/或复合错误。在实际计算机上进行所有涉及实数和有限数值表示的计算时,它们都是固有的/不可避免的。
有关更广泛的治疗方法,请阅读:Is floating point math broken?
现在,如果您愿意,您可以检查这里的数字的二进制表示法,并精确地计算出这里发生错误的位置:
- 在十进制->二进制浮点转换中
- 在浮点运算中
- 在二进制浮点转换->十进制转换中,
- 或以上多个中的一个。
Float.floatToRawBits
方法及其double
模拟。这些将允许您检查二进制浮点表示。然后,您可以手动将它们转换为精确实数,并计算出与"理想"小数表示法相比的误差。
单调乏味。
这篇关于为什么结果不同?浮动VS双精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:为什么结果不同?浮动VS双精度
猜你喜欢
- 获取数字的最后一位 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 转换 ldap 日期 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01