在Java中我运行:
System.out.println(Math.log(249.0/251.0));
输出:-0.008000042667076265
在C#中我运行:< - fixed
Math.Log (x/y); \\where x, y are almost assuredly 249.0 and 251.0 respectively
谷歌声称:输出:-0.175281838(在程序后面打印出来)
Log(249.0/251.0)
输出:-0.00347437439
MacOS声称同样的事情(google和Snow Leopard之间的第一个区别是大约10 ^ -8,这可以忽略不计。
是否有任何理由认为这些结果应该如此广泛变化,或者我错过了一些非常明显的结果? (我确实检查过java和C#都使用了基数e)。即使是略微不同的e值似乎也不能解释如此大的差异。有什么建议吗?
编辑:
验证Wolfram Alpha似乎表明Java是正确的(或者Wolfram Alpha使用Java Math作为对数...)并且我的C#程序没有正确的输入,但我不愿意相信这一点,因为(e ^(谷歌结果) - 249/251)给我一个0.0044的误差,这在我看来相当大,暗示手头有不同的问题......
答案 0 :(得分:7)
您正在查看具有不同基数的对数:
System.out.println(Math.log(249.0/251.0));
是一个自然日志(基础e)Math.Log (x,y);
提供x
的日志,其基数由y
Log(249.0/251.0)
提供日志库10 虽然我没有从C#(Math.Log( 249.0, 251.0) == 0.998552147171426
)得到结果。
答案 1 :(得分:3)
在C#程序的某个地方,您在计算日志的位置和打印出来的位置之间存在错误。 Math.Log给出了正确的答案:
class P
{
static void Main()
{
System.Console.WriteLine(System.Math.Log(249.0/251.0));
}
}
打印出-0.00800004266707626