このC#コードでMath.Pow(a、b)関数を使用するのはどれくらいですか?

StackOverflow https://stackoverflow.com/questions/4723320

  •  12-10-2019
  •  | 
  •  

質問

私は次のコードに問題があることはありません。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の数学クラスは複雑な数字をサポートしていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top