4

現在、古い C++ コードを C# に書き直しています。いくつかのテストを実行すると、正常に動作しませんでした。デバッグを開始したところ、理解できないように見える以下に出くわしました。

私はクラスで多くの数学を行っており、Math.Pow 関数を頻繁に使用しているため、そのショートカット メソッドを作成しました。

public double pow(double d, double p)
{
   return Math.Pow(d,p);
}

次に、このメソッドをかなり頻繁に使用する次のようなコード行があります。

double y = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2) - (2.0 * (pow(d12, 4) + pow(d13, 4) + pow(d23, 4)));

この行では期待した結果が得られなかったので、計算する必要があるため、小さな断片に分割し始めました...たとえば、マイナス記号の前の値はq5に等しくなければなりません:

double q1 = pow(d12, 2);
double q2 = pow(d13, 2);
double q3 = pow(d23, 2);
double q4 = q1 + q2 + q3;
double q5 = pow(q4, 2);

これらの行の後、q5 は 8775553070736.0 です。

次に、長い行を 2 つの部分に分割してみました。最初の行は、上記の 5 行に等しく、1 行として記述されている必要があります。

double q12 = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2);

これはq5と同じと評価されると予想されますが、そうではありません。q12 は代わりに 4479508755225.0 に評価されます

コードの何が問題になっていますか?

4

1 に答える 1

6

期待する理由:

pow(d23, 2)

と同じになる

pow(23, 2)

?

PROTIP: VS では、常に数字のデフォルトの色 (黒) を別のもの (私は赤が好き) に変更します。

于 2012-06-01T11:33:39.960 に答える