Java复杂的Math.log函数给出了错误的答案

Kil*_*leR -1 java math logarithm

我正在运行以下功能来模拟功率流.

Math.log( (1000 * d) / ((1000 * d) - p )) / Math.log(1000/999);
Run Code Online (Sandbox Code Playgroud)

我正在做两个不同的p值测试

对彼此而言:

p = 1333
Run Code Online (Sandbox Code Playgroud)

测试1:

d = 1000000
Run Code Online (Sandbox Code Playgroud)

测试2:

d = 200000
Run Code Online (Sandbox Code Playgroud)

通过java运行,两者都返回Infinity

如果我将等式放入谷歌,它会返回我期望的值.(测试1为1386,测试2为162)

谷歌中的公式为

ln( (1000 * (1333)) / ((1000 * (1333)) - (200000) )) / ln(1000/999)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

rge*_*man 6

你正在执行Java的整数除法1000/999,它必须导致另一个int,即1.对数,任何基数,10,除以0得到你Infinity.

使用double文字或将其中一个int文字作为double:

Math.log(1000.0 / 999.0)
Run Code Online (Sandbox Code Playgroud)

要么

Math.log( (double) 1000 / 999)
Run Code Online (Sandbox Code Playgroud)