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 (プログラムの後半で出力)

Google は次のように主張しています。

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^ (google result) - 249/251) 私の意見ではかなり大きな 0.0044 のエラーが発生し、手元に別の問題があることを示唆しています...

4

2 に答える 2

7

底が異なる対数を見ています。

  • JavaSystem.out.println(Math.log(249.0/251.0));は自然対数 (base e)
  • C#は、ベースが指定されMath.Log (x,y);たのログを提供しますxy
  • GoogleLog(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 に答える