0

OK、それで私はここで厄介な数学計算を実行して、立方根の1つを解こうとしています。

さて、これが私のC#コードです:

public void CubeCalculate()
{
    //Calculate discriminant

    double insideSquareRoot = (18 * cubicAValue * cubicBValue * cubicCValue * cubicDValue) + (-4 * (Math.Pow(cubicBValue, 3) * cubicDValue) + (Math.Pow(cubicBValue, 2) * Math.Pow(cubicCValue, 2)) + (-4 * cubicAValue * Math.Pow(cubicCValue, 3)) + (-27 * Math.Pow(cubicAValue, 2) * Math.Pow(cubicDValue, 2)));

    if (insideSquareRoot < 0)
    {
        //One real solution, two imaginary
        double onecuberootradical1 = (1 / 2) * (((2 * Math.Pow(cubicBValue, 3)) + (-9 * cubicAValue * cubicBValue * cubicCValue) + (27 * Math.Pow(cubicAValue, 2) * cubicDValue)) + (Math.Sqrt(Math.Pow((2 * Math.Pow(cubicBValue, 3)) + (-9 * cubicAValue * cubicBValue * cubicCValue) + (27 * Math.Pow(cubicAValue, 2) * cubicDValue), 2) + (-4 * Math.Pow(Math.Pow(cubicBValue, 2) + (-3 * cubicAValue * cubicCValue), 3)))));
        double onecuberootradical2 = (1 / 2) * (((2 * Math.Pow(cubicBValue, 3)) + (-9 * cubicAValue * cubicBValue * cubicCValue) + (27 * Math.Pow(cubicAValue, 2) * cubicDValue)) - (Math.Sqrt(Math.Pow((2 * Math.Pow(cubicBValue, 3)) + (-9 * cubicAValue * cubicBValue * cubicCValue) + (27 * Math.Pow(cubicAValue, 2) * cubicDValue), 2) + (-4 * Math.Pow(Math.Pow(cubicBValue, 2) + (-3 * cubicAValue * cubicCValue), 3)))));
        x1 = (-cubicBValue / (3 * cubicAValue)) + ((-1 / (3 * cubicAValue)) * (Math.Pow(onecuberootradical1, 1 / 3))) + (-1 / (3 * cubicAValue) * Math.Pow(onecuberootradical2, 1 / 3));
        x2 = double.NaN;
        x3 = double.NaN;
    }

OK、ここで何が問題になっているのかを理解しようとしています。

まず、これはMVCアプリケーションの一部であるため、他のルートが正しく機能していることを確認しました。これは純粋に次の計算の誤りであり、他の場所からの問題ではありません。

今、私はここで何度もチェックしましたが、何も問題は見つかりませんでした。

ここで適切な式と比較できます。 代替テキスト

x1ここで複製しようとしているのはルートです。

また、公式の判別式が同じWikiepdiaの記事を形成していることを知りたい場合は、次のようになります。

代替テキスト

何かおかしいと思いますか?

4

2 に答える 2

9

ここに明らかなことがあります:

(1 / 2)

浮動小数点数を使用する必要がある場合は、そこで整数除算を実行しています。

(1 / 2.0)

あなたはcubic*Value変数の宣言を私たちに示さないので、それらはdoubleであると仮定します。

于 2010-10-30T23:37:41.797 に答える
1

これはよくある質問の1つであるか、そうあるべきです。答えは次のとおりです。すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと(リンク

于 2010-10-30T23:40:52.017 に答える