【问题标题】:Pseudo Code to Java translation error伪代码到 Java 翻译错误
【发布时间】:2014-11-17 05:35:28
【问题描述】:

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

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

伪代码

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;

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

【问题讨论】:

  • 你在说什么错误?您发布的代码没有任何问题。
  • 你得到什么结果,你期望什么?
  • 7^1000 约为 1.25e845。它超过了双倍的范围。 long,64位整数,可以表示-9.2e18到+9.2e18。 1.25e845也超出了long的范围。这是java语言限制的问题,不是翻译的问题。

标签: java pseudocode code-translation


【解决方案1】:

当你这样做时,

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 like

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

输出是

432069569

当然,真正的结果是通过

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

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

【讨论】:

  • 所以,这既是 y = infinity 的事实,也是你在转换时获得 n 的最大整数值的事实。我不知道第二个发生。非常感谢。
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多