伪代码到Java转换错误

时间:2014-11-17 05:35:28

标签: java pseudocode code-translation

在将下面的伪代码翻译成Java时,我有一个关于错误的问题。由于截断而导致精度损失没有问题,但是我似乎无法找到编程语言问题。

我虽然答案是Math.pow()的结果对于双倍来说太大了(范围从4.94065645841246544e-324d1.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;

非常感谢,我真的很想了解这里的问题。

1 个答案:

答案 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之类的

int n = BigInteger.valueOf(7).pow(1000).intValue();
System.out.println(n);

输出

432069569

当然,真正的结果是通过

获得的
System.out.println(BigInteger.valueOf(7).pow(1000));

这确实导致了非常大的数字。