3

我认为从代码中可以很好地自我解释。显然,我不会一遍又一遍地评估同一件事,它只是解释我的问题的示例数字。我猜它的上溢/下溢,但我不知道如何处理它。

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

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

5 回答 5

8

(1 / (684985+157781))是一个整数表达式,所以它会变成0. 然后将零分配给double d, 作为0.0

尝试更改1to1.0以强制该表达式为浮点数,或1.0D强制它加倍。

于 2011-12-11T21:09:07.063 回答
7

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

double d = (1.0 / (684985.0+157781.0));
于 2011-12-11T21:07:19.093 回答
5

不,在 Java 中如果你使用整数,除法的结果将再次是整数,你必须将至少一个操作数转换为双精度。

double d = (1 / (double)(684985+157781));
于 2011-12-11T21:07:47.080 回答
4

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

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

于 2011-12-11T21:07:39.053 回答
3

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

double d = (1.0 / (684985.0+157781.0));
于 2011-12-11T21:07:44.317 回答