gpt4 book ai didi

java - 比较 Java 中的 float 和 double 原语

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:55 24 4
gpt4 key购买 nike

我遇到了Java的一个奇怪的角落。(我觉得很奇怪)

double dd = 3.5;          
float ff = 3.5f;
System.out.println(dd==ff);

o/p:正确

double dd = 3.2;
float ff = 3.2f;
System.out.println(dd==ff);

o/p:假

我观察到,如果我们将任意两个值(我在示例中提到的 float 和 double 值)与 .5.0 进行比较,例如 3.5、234.5, 645.0然后输出为 true 即两个值相等,否则输出为 false 尽管它们相等。

我什至尝试制作方法 strictfp 但没有成功。我是不是错过了什么。

最佳答案

看看What every computer scientist should know about floating point numbers .

Squeezing infinitely many real numbers into a finite number of bits requires an approximate representation....

--- 编辑以显示上述引用的含义---

您不应该比较 float 或 double 是否相等;因为,您不能真正保证分配给 float 或 double 的数字是准确的。

所以

 float x = 3.2f;

不会产生值为 3.2 的 float 。它会产生一个值为 3.2 加上或减去一些非常小的错误的 float 。说 3.19999999997f。现在比较不起作用的原因应该很明显了。

要理智地比较 float 是否相等,您需要检查该值是否“足够接近”相同的值,就像这样

float error = 0.000001 * second;
if ((first >= second - error) || (first <= second + error)) {
// close enough that we'll consider the two equal
...
}

关于java - 比较 Java 中的 float 和 double 原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392167/

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