0

在Java中我运行:

System.out.println(Math.log(249.0/251.0));

输出:-0.008000042667076265

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

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# 都使用 base e)。即使是轻微不同的 e 值似乎也无法解释如此大的差异。有什么建议么?

编辑:

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

4

2 回答 2

7

您正在查看具有不同底数的对数:

  • JavaSystem.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) 中得到你所做的结果。

于 2010-07-02T05:40:19.043 回答
3

您在 C# 程序中的某处有错误,介于计算日志的位置和打印输出的位置之间。Math.Log 给出了正确答案:

class P
{
  static void Main()
  {
      System.Console.WriteLine(System.Math.Log(249.0/251.0));
  }
}

打印出 -0.00800004266707626

于 2010-07-02T05:51:29.130 回答