我认为它在代码中非常自我解释。显然,我不是一遍又一遍地评估同样的事情,它只是解释我的问题的示例数字。我猜它的上溢/下溢但我不知道如何处理它。
double d = (1 / (684985+157781));
System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.
答案 0 :(得分:8)
(1 / (684985+157781))
是一个整数表达式,因此它将出现在0
。
然后,零被分配到double d
,0.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));