[英]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.