2010-10-30 45 views
0

好的,所以我在這裏執行一個惱人的數學計算,試圖解決一個立方根。C#數學計算不能正常工作

現在,這裏是我的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應用程序的一部分,因此我確定我的其他根目錄正常工作,所以這純粹是以下計算的錯誤,而不是其他任何問題。

現在,我在這裏查了很多次,我沒有發現任何錯誤。

您可以比較在這裏正確的公式: alt text

這是x1根,我想在這裏複製。

另外,如果你想知道官方判別形成same Wikiepdia article那就是:

alt text

難道你們看到什麼問題???

回答

8

就在這裏是明顯的東西:

(1/2) 

你在那裏執行整數除法時,你應該用一個浮點數:

(1/2.0) 

你不告訴我們申報的立方*價值變量,所以我會假設那些是雙打的。

+0

OK,謝謝你,是的,這些都是雙打。 – Qcom 2010-10-30 23:41:00

+0

感謝你的提問,現在只是一個問題,每個人的數字不變都必須用小數點指定,讓C#知道它是浮點數/雙數?此外,這並沒有完全解決我的問題。 – Qcom 2010-10-30 23:51:56

+1

@Boss你是否也修復了你擁有的兩個1/3? – 2010-10-31 00:03:10

1

這是或者應該是常見的問題之一,答案是: 什麼每臺計算機科學家應該知道關於浮點運算(link