.net フレームワークは、Math クラスに double を強化するためのメソッドを提供します。しかし、精度要件により、10 進数を 10 乗する必要があります [ Pow(decimal a, decimal b) ]。フレームワークにはそのような機能がありますか?この種の機能を備えたライブラリを知っている人はいますか?
質問する
31216 次
5 に答える
8
これは、正の整数の Exponent と 10 進数の基数の場合、最速のはずです。
// From http://www.daimi.au.dk/~ivan/FastExpproject.pdf
// Left to Right Binary Exponentiation
public static decimal Pow(decimal x, uint y){
decimal A = 1m;
BitArray e = new BitArray(BitConverter.GetBytes(y));
int t = e.Count;
for (int i = t-1; i >= 0; --i) {
A *= A;
if (e[i] == true) {
A *= x;
}
}
return A;
}
于 2012-09-13T14:45:51.683 に答える
0
プラグインする予定の数値に大きく依存すると思います。「a」と「b」が「適切な」数値でない場合、保存できない非終了の値を取得する可能性が高く、C# の場合BigDecimal は、Java BigDecimal とまったく同じように動作します。このような場合、おそらく例外がスローされます。
于 2009-01-09T18:37:07.947 に答える
-3
あなたは本当にこれをしたいですか?乗算はのdecimal
約 40 倍遅いdouble
ため、小数Math.Pow()
は実質的に使用できないと予想されます。
ただし、整数の累乗のみを期待する場合は、SO で既に説明した整数ベースの累乗アルゴリズムを使用することをお勧めします。
于 2009-01-09T18:36:39.227 に答える