2014-05-09 52 views
0

我剛剛發現輸入負x和小數y時,Math.Pow()返回未定義的值作爲結果,這是錯誤的我猜。在其他程序中計算,即使像Windows計算器一樣工作得到正確的結果。此外,這種情況在文檔中沒有提及。C#Math.Pow(-2,1.1)> n.def

目標框架是4

任何人都可以解釋一下嗎?

+2

這將是複數:'(-2)^ 1.1 = -2.0386 - 0.6624i'。 –

+0

這不包括在文檔中?「x <0但不是** NegativeInfinity **; y不是整數,** NegativeInfinity **或** PositiveInfinity **。」 - 返回值是** NaN ** –

+1

您的意思是Windows計算器的工作原理是什麼?它對我說「無效輸入」。 –

回答

5

結果將是複雜的數字,因此您必須使用System.Numerics命名空間中的Complex類。

Complex n = new Complex(-2, 0); 
Complex result = Complex.Pow(n, 1.1); 

在情況下,如果結果是號(整數功率),那麼你可以使用Math.Pow

如@JeppeStigNielsen所提到的,從int/doubleComplex轉換是隱式的,因此代碼可以縮短爲:

Complex result = Complex.Pow(-2, 1.1); 
+1

Upvoted提到'Complex.Pow'。更簡單地說,你可以寫'Complex.Pow(-2,1.1)',從真實的double(在這種情況下實際上是「int」)到Complex的轉換是隱含的。請注意,複數取冪需要選擇一個分支。對於一些輸入,如'Complex.Pow(-2,1.2)',結果不同於Windows計算器,'(-2)^ 1.2'。 –

1

而且這種情況下,文檔中沒有提到

你確定嗎?從它的documentation;

參數

X < 0但不NegativeInfinity; y不是整數, NegativeInfinity或PositiveInfinity。

返回值

NaN的

我不知道哪個操作系統您嘗試,但它不能在工作CALC.EXE(Win7的 - 64)說:無效的輸入

As Ulugbek mentioned,以1.1爲負值的冪產生一個複數。因爲(-2)1.1 =(-2)11/10 =(-2)1/10 11和得到的-210倍rooth返回複數。

由於Math.Pow取值並返回double值,這不符合要求。您可以使用System.Numerics中的Complex類。

http://www.wolframalpha.com/input/?i=-2^1.1

enter image description here

進一步閱讀:How is Math.Pow() implemented in .NET Framework?