在将下面的伪代码翻译成Java时,我有一个关于错误的问题。由于截断而导致精度损失没有问题,但是我似乎无法找到编程语言问题。
我虽然答案是Math.pow()
的结果对于双倍来说太大了(范围从4.94065645841246544e-324d
到1.79769313486231570e+308d
。但显然有更多错误我可以&# 39;看不见。
PSEUDO CODE
x = 7.0
y = x^1000.0
n = y truncated to an integer
转换为
JAVA
double x, y;
int n;
x = 7.0;
y = Math.pow(x,1000.0);
n = (int)y;
非常感谢,我真的很想了解这里的问题。
答案 0 :(得分:0)
当你这样做时,
double x = 7.0;
double y = Math.pow(x, 1000.0); // <-- INFINITY
你确实超过double
的精确度而得到Double.POSITIVE_INFINITY
System.out.println(y);
输出
Infinity
当你将其转换为int
时,你会得到Integer.MAX_VALUE
,即2 ^ 31-1或2147483647.如果你想获得更有说服力的结果,你可以使用BigInteger
之类的{ p>
int n = BigInteger.valueOf(7).pow(1000).intValue();
System.out.println(n);
输出
432069569
当然,真正的结果是通过
获得的System.out.println(BigInteger.valueOf(7).pow(1000));
这确实导致了非常大的数字。