【问题标题】:First k digits of exponent in javajava中指数的前k位
【发布时间】:2013-10-18 00:31:07
【问题描述】:

以下是我编写的用于在 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

【问题讨论】:

  • 您可以使用 BigInteger 来代替。顺便说一下,示例输出似乎应该是 999999980 而不是 367879443。

标签: java algorithm exponent largenumber


【解决方案1】:

双精度大约有 16 位十进制数字。 x 大约是 8e8,因此当您计算 x - Math.floor(x)(小数部分)时,您会得到一个仅精确到大约 7 或 8 位的数字。所以结果不能精确到8位以上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多