簡體   English   中英

在此C#代碼中使用Math.Pow(a,b)函數有何錯誤?

[英]How wrong do I use Math.Pow(a,b) function in this C# code?

我找不到以下代碼有什么問題,MSVC#編譯器將NAN存儲在“ c”中:

double c = Math.Pow(-8d, 1d / 3d);

雖然我認為這一行應該為“ c”計算-2,但是編譯器將NAN存儲在“ c”中? 我有什么錯嗎?

僅針對正基數或整數指數定義浮點數的冪函數。 嘗試

double c = - Math.Pow(8d, 1d / 3d);

實際上,1/3不能完全表示為浮點數,但需要四舍五入。 在理論上,甚至沒有關於舍入指數的確切實際結果。

通常,人們不會說(-8)^(1/3)= -2。

的確是(-2)^ 3 = -8,但是負數的冪是一件復雜的事情。

您可以在Wikipedia上閱讀有關該問題的更多信息:

對數方法和有理指數方法都不能用於將a ^ r定義為負實數a和任意實數r的實數。 實際上,對於每個實數r,er都是正數,因此ln(a)並未定義為a≤0的實數。(另一方面,可以通過選擇n的復數來定義負數a的任意復數冪。一種。)

簡而言之,在數學上很難正確定義a ^ r的值,當a為負數時,以免一個人開始使用復數,因此,一般而言,應該避免嘗試這樣做。

答案是一個復數: 1.0+1.732050807568877i .NET的Math類不支持復數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM