繁体   English   中英

Java中指数的前k位

[英]First k digits of exponent in java

以下是我编写的用于查找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可以得到相同的结果。 关于代码有什么建议吗? BTW n <= 10 ^ 9并且k <= 9。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM