4

だから私は長い間グーグルしていましたが、ほとんど何も見つかりませんでした。この urlから Math.Pow の実装の可能性に関する情報を見つけましたが、これらは不正確です。たとえば、このコード

public static double PowerA(double a, double b)
{
    int tmp = (int)(BitConverter.DoubleToInt64Bits(a) >> 32);
    int tmp2 = (int)(b * (tmp - 1072632447) + 1072632447);
    return BitConverter.Int64BitsToDouble(((long)tmp2) << 32);
}
static void Main(string[] args)
{
    double x = 12.53, y = 16.45;
    Console.WriteLine(Math.Pow(x, y));
    Console.WriteLine(PowerA(x, y));
}

出力を提供します:

1,15158266266297E+18
8,9966384455562E+17

とても不正確です...

シリーズの合計のように機能すると思っていましたが、確かにはわかりません。

4

1 に答える 1

7

pow は通常、次の式で評価されます。

x^y = exp2(y*log2(x))

関数はFPUexp2(x),log2(x)に直接実装されます。bignumを実装したい場合は、次のような事前計算された sqrt-powers テーブルを使用して、基本的な演算子によって評価することもできます。

2^1/2, 2^1/4, 2^1/8, 2^1/16, 2^1/32 ...

プロセスをスピードアップする

負の塩基の応援も処理する必要がある場合は、次を参照してください。

于 2013-09-28T22:39:54.177 に答える