2016-04-18 2 views
0

私はちょっと混乱するために、これらのコードスニペットの以下の実行を見つけた:BigInteger.Pow()の実装の違いは何BigInteger.Pow()とMath.Pow()の違いは何ですか?

BigInteger result = (BigInteger)Math.Pow(1000, 1000); 

と:これは文句を言わないエラーなしでしかし、このいずれかをコンパイルします

BigInteger result = BigInteger.Pow(1000, 1000); 

Math.Pow()。どちらの場合も、我々はusing System.Numericsです。

2番目のスローOverflowException BigIntegerは無限大を表すことはできません。

+0

私の知る限り、Mathは通常のデータ型で使用されますが、BigIntegerはそれ自体の特殊な型です。複数の整数がまとめられているため、同じ関数を使用することはできません。 (BigIntegerメソッドが計算を行うBigIntegerを使用するのに対し、**この計算には十分な大きさの値を保持できない**標準データ型を使用するので、これを計算するとMathデータメソッドはオーバーフローします) –

+0

エラーは何を伝えますか 'BigIntegerは無限を表すことができません。 ' – MethodMan

+0

ドキュメントは不明ですか?どうして? –

答えて

6

1000^1000doubleの範囲外なので、あなたがMath.Pow(1000,1000)を呼び出すときには、double.PositiveInfinityを返します。

double.PositiveInfinityBigIntegerに割り当てることはできません。したがって、エラーです。

関連する問題