2

MSVC# コンパイラが NAN を "c" に保存するため、次のコードに問題は見つかりません。

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

この行は "c" に対して -2 を計算する必要があると思いますが、コンパイラは NAN を "c" に格納しますか? 私は何か間違っていますか?

4

3 に答える 3

7

浮動小数点数の累乗関数は、正の基数または整数指数に対してのみ定義されます。試す

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

実際には、1/3 を浮動小数点数として正確に表現することはできず、丸める必要があります。丸められた指数の正確な実際の結果は、理論上も存在しません。

于 2011-01-18T11:08:37.007 に答える
6

通常、(-8)^(1/3) = -2 とは言いません。

確かに (-2)^3 = -8 は真実ですが、負の数の累乗は複雑な問題です。

ウィキペディアで問題の詳細を読むことができます:

対数法も有理指数法も、負の実数 a と任意の実数 r に対して a^r を実数として定義するために使用することはできません。実際、er はすべての実数 r に対して正であるため、ln(a) は a ≤ 0 の実数として定義されません (一方、負の数 a の任意の複素べき乗は、 a.)

要するに、a^r がどうあるべきかを適切に定義することは数学的に困難です。a が負の場合、複素数を扱うことを開始しないようにするため、一般に、それを行うことを避ける必要があります。

于 2011-01-18T11:11:39.480 に答える
3

答えは複素数です: 1.0+1.732050807568877i. .NET の Math クラスは複素数をサポートしていません。

于 2011-01-18T11:10:11.870 に答える