0

以下は、Java で n^n の最初の k 桁を見つけるために私が書いたコードです。

private static int firstK(int n,int k)
{
   double x, y;
   x = n * Math.log10(n);
   y = Math.floor(Math.pow(10, x - Math.floor(x) + k - 1));
   return((int)y);
}

ただし、n=99999999 と k=9 を入力すると、Java の結果は 367879457 になりますが、元の回答は 367879443 であるはずです。間違った結果が表示されるのはなぜですか? Javaのdoubleの精度と何か関係がありますか? BigDecimal を使用しても同じ結果が得られます。コードに関する提案はありますか?ところで、n<=10^9 および k<=9。

4

1 に答える 1

0

double の精度は 10 進数で約 16 桁です。xは約 8e8 であるため、x - Math.floor(x)(小数部分) を計算すると、約 7 桁または 8 桁の精度しか得られません。そのため、結果は 8 桁を超える正確なものにはなりません。

于 2013-11-18T23:51:58.820 に答える