我该如何评估这个等式?

时间:2011-12-11 21:03:35

标签: java overflow underflow

我认为它在代码中非常自我​​解释。显然,我不是一遍又一遍地评估同样的事情,它只是解释我的问题的示例数字。我猜它的上溢/下溢但我不知道如何处理它。

double d = (1 / (684985+157781));

System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.

5 个答案:

答案 0 :(得分:8)

(1 / (684985+157781))是一个整数表达式,因此它将出现在0。 然后,零被分配到double d0.0

尝试将1更改为1.0以强制该表达式为浮点数,或1.0D强制将其加倍。

答案 1 :(得分:7)

通过整数除法完成的另一个人:

double d = (1.0 / (684985.0+157781.0));

答案 2 :(得分:5)

不,在Java中如果使用整数,除法的结果将再次为整数,您必须将至少一个操作数转换为加倍。

double d = (1 / (double)(684985+157781));

答案 3 :(得分:4)

尝试使用double d = (1.0 / (684985+157781));

请注意1.0部分:您想强制进行双重评估。

答案 4 :(得分:3)

第一个表达式以整数运算计算。为了得到你期望的答案,你需要用浮点运算来计算它,因此:

double d = (1.0 / (684985.0+157781.0));