伪代码到Java转换错误

伪代码到Java转换错误,java,pseudocode,code-translation,Java,Pseudocode,Code Translation,我有一个关于将下面的伪代码翻译成Java时出错的问题。由于截断而导致的精度损失是没有问题的,但这是一个我似乎找不到的编程语言问题 我认为答案应该是Math.pow()的结果对于双精度(范围从4.94065645841246544e-324d到1.79769313486231570e+308d)来说太多了。但显然还有更多的错误,我看不出来 伪码 x = 7.0 y = x^1000.0 n = y truncated to an integer 转化为 爪哇 非常感谢,我真的很想了解这里的问题。

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

我认为答案应该是
Math.pow()
的结果对于双精度(范围从
4.94065645841246544e-324d
1.79769313486231570e+308d
)来说太多了。但显然还有更多的错误,我看不出来

伪码

x = 7.0
y = x^1000.0
n = y truncated to an integer
转化为

爪哇

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

如果您了解

double x = 7.0;
double y = Math.pow(x, 1000.0); // <-- INFINITY
输出为

Infinity
432069569
当您将其转换为
int
时,得到的是2^31-1或2147483647。如果您想得到更令人信服的结果,可以使用
biginger
类似的

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

Infinity
432069569
当然,真正的结果是通过

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

这确实导致了一个很大的数字。

你说的是什么错误?你发布的代码没有问题。你得到了什么结果?你期望得到什么?7^1000大约是1.25e845。它超出了双精度的范围。长的64位整数,可以表示-9.2e18到+9.2e18。1.25e845也超出了长的范围。这就是问题所在java语言的限制,而不是翻译。所以,这是事实,y=无穷大,并且在施法时得到n的最大整数值。我不知道第二个出现了。非常感谢。