我认为从代码中可以很好地自我解释。显然,我不会一遍又一遍地评估同一件事,它只是解释我的问题的示例数字。我猜它的上溢/下溢,但我不知道如何处理它。
double d = (1 / (684985+157781));
System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.
(1 / (684985+157781))
是一个整数表达式,所以它会变成0
. 然后将零分配给double d
, 作为0.0
。
尝试更改1
to1.0
以强制该表达式为浮点数,或1.0D
强制它加倍。
另一个人通过整数除法完成:
double d = (1.0 / (684985.0+157781.0));
不,在 Java 中如果你使用整数,除法的结果将再次是整数,你必须将至少一个操作数转换为双精度。
double d = (1 / (double)(684985+157781));
尝试使用double d = (1.0 / (684985+157781));
请注意1.0
部分:您要强制进行双重评估。
第一个表达式是用整数算术计算的。为了得到你期望的答案,你需要用浮点运算来计算它,因此:
double d = (1.0 / (684985.0+157781.0));