このC#コードでMath.Pow(a、b)関数を使用するのはどれくらいですか?
質問
私は次のコードに問題があることはありません。MSVC#コンパイラは「C」にNANを保存しています。
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)は≤0の実数として定義されていません(一方、負の数の任意の複雑なパワーAは、複雑な対数を選択することで定義できます。 a。)
要するに、a^rが何をすべきかを適切に定義することは数学的に難しいです。aが負の場合、複雑な数値で作業を開始しないようにしているため、一般的にそれを行おうとすることを避けるべきです。
答えは複雑な数です: 1.0+1.732050807568877i
. 。 .NETの数学クラスは複雑な数字をサポートしていません。
所属していません StackOverflow