java无穷大误差投影Euler#26个倒数循环
我在试图解决Euler项目的问题#26时,在Eclipse中收到了一个错误
我不想要解决方案!求你了
如果你能给我一个建议,只是关于为什么我收到“无限”作为输出,请填写我。我试过用谷歌搜索,但很难不意外地看到解决方案,我宁愿在尽可能少的帮助下完成
无穷大误差在p=309之后。这可能根本不是一个“错误”,也许只是截断了一些东西。我尝试了long和BigInteger,但似乎没有帮助
以下是PE#26中提出的问题:
这是我的代码:
public class Reciprocal_Cycles {
public static void main(String[] args) {
double b = 10;
double p;
for (p = 1; p < 1000; p++) {
if (p % b != 0)
System.out.println(((Math.pow(b, p - 1) - 1)) / p + " " + p);
}
}
}
# 1 楼答案
一个
double
所能代表的最大数约为1.8e+308
,而Math.pow(10, 309)
大于这个数。当浮点计算像这样溢出时,会得到+inf
此外,在使用
p % b != 0
和浮点变量时,我也要小心