以不同语言/体系结构/操作系统的相对较小数量的对数

Rit*_*ose 0 c# java floating-accuracy

在Java中我运行:

System.out.println(Math.log(249.0/251.0));
Run Code Online (Sandbox Code Playgroud)

输出:-0.008000042667076265

在C#中我运行:< - 修复

Math.Log (x/y); \\where x, y are almost assuredly 249.0 and 251.0 respectively
Run Code Online (Sandbox Code Playgroud)

输出:-0.175281838(在程序后面打印出来)

谷歌声称:

Log(249.0/251.0)
Run Code Online (Sandbox Code Playgroud)

输出:-0.00347437439

MacOS声称同样的事情(谷歌与Snow Leopard之间的第一个区别是大约10 ^ -8,这可以忽略不计.

是否有任何理由认为这些结果应该如此广泛地变化,或者我错过了一些非常明显的结果?(我确实检查过java和C#都使用了基数e).即使是略微不同的e值似乎也不能解释如此大的差异.有什么建议?

编辑:

在Wolfram Alpha上进行验证似乎表明Java是正确的(或者Wolfram Alpha使用Java Math作为对数...)并且我的C#程序没有正确的输入,但我不愿意相信这一点因为考虑(e ^ (谷歌结果) - 249/251)给我一个0.0044的误差,这在我看来相当大,暗示手头有一个不同的问题......

Mic*_*urr 7

你正在寻找具有不同基数的对数:

  • Java System.out.println(Math.log(249.0/251.0));是一个自然日志(基础e)
  • C#Math.Log (x,y);给出了x指定基数的日志y
  • 谷歌Log(249.0/251.0)给出了日志库10

虽然我没有从C#(Math.Log( 249.0, 251.0) == 0.998552147171426)获得结果.