現在、古い 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 に評価されます
コードの何が問題になっていますか?