gpt4 book ai didi

java - 值的差异仍然得到 == 比较为真

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:04 26 4
gpt4 key购买 nike

double d= 10/3.0f;   // returns 3.3333332538604736;
float f= 10/3.0f; // returns 3.3333333;
System.out.println(d-f); //returns 0 ;
System.out.println(d==f); //returns true;

is there a range after the decimal up to which the jvm checks the difference between numbers, and if so, what is that range and why?

最佳答案

理解为什么没有区别的关键是理解它的作用:

double d = 10 / 3.0f;

首先 10 被提升为 10.0f

接下来计算表达式 10.0f/3.0f 以给出一个 float 值。

最后,float 值被提升为 double,然后分配给 d

简而言之,10/3.0f 使用float 算法并生成一个float 值。事实上,同样的事情也发生在这里:

float f = 10 / 3.0f;

除了我们跳过促销到 double

现在开始:

System.out.println(d == f);

这里发生的是 f 被提升为 double,然后将该值与 d 进行比较。

而且……它们是一样的。

因为 d 的值也是由相同的操作序列产生的;往上看。 (只是 floatdouble 的提升发生在代码中的不同点。)

通过相同的推理...在 d - f 中,f 将在被减去之前提升,并且您将从其自身减去一个值.


注意:我所说的“提升”在技术上正确的 Java 术语是“原始扩展转换”。但这有点啰嗦。

关于java - 值的差异仍然得到 == 比较为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48786962/

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