0

オイラーの問題を解いているときに、これに出くわしました..

BigInteger temp = (BigInteger)Math.Pow(99, 95); Console.WriteLine(temp.ToString());

次の数値を出力します。 3848960788934848488282452569509484590776195611314554049114673132510910096787679715604422673797115451807631980373077374162416714994207463122539142978709403811688831410945323915071533162168320

しかし、このリンクを使用して電力を見つけようとすると、表示されます..

3848960788934848611927795802824596789608451156087366034658627953530148126008534258032267383768627487094610968554286692697374726725853195657679460590239636893953692985541958490801973870359499

2つの値は異なります。私の質問は、数学関数を使用して累乗を見つけることに制限がありますか、またはdouble から BignInteger への変換が間違っていますか?

4

1 に答える 1

2

BigInteger.Powではなく、を使用する必要がありますMath.Pow

を使用Math.Powすると、戻り値は倍精度浮動小数点型になり、その精度は有効 10 進数で約 15 ~ 17 桁に相当します。したがって、最初の 15 ~ 17 桁のみが正しいことになります。

于 2013-08-02T12:45:38.570 に答える