29

.net フレームワークは、Math クラスに double を強化するためのメソッドを提供します。しかし、精度要件により、10 進数を 10 乗する必要があります [ Pow(decimal a, decimal b) ]。フレームワークにはそのような機能がありますか?この種の機能を備えたライブラリを知っている人はいますか?

4

5 に答える 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 に答える