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 は真実ですが、負の数の累乗は複雑な問題です。
ウィキペディアで問題の詳細を読むことができます:
対数法も有理指数法も、負の実数 a と任意の実数 r に対して a^r を実数として定義するために使用することはできません。実際、er はすべての実数 r に対して正であるため、ln(a) は a ≤ 0 の実数として定義されません (一方、負の数 a の任意の複素べき乗は、 a.)
要するに、a^r がどうあるべきかを適切に定義することは数学的に困難です。a が負の場合、複素数を扱うことを開始しないようにするため、一般に、それを行うことを避ける必要があります。
答えは複素数です: 1.0+1.732050807568877i
. .NET の Math クラスは複素数をサポートしていません。