伙计们,希望你能指出我,我错过了什么。我是编程和解决Project Euler问题的新手。其中一项任务是计算偶数Fibonacci序列的总和。我编写的代码通过了5个测试中的4个。这是:
public class TextFieldCustom extends TextField {
public TextFieldCustom(){
}
@Override
public void replaceText(int start, int end, String string) {
if (string.matches("[0-9,]")|| string.isEmpty()){
super.replaceText(start, end, string);
}
}
@Override
public void replaceSelection(String string){
super.replaceSelection(string);
}
}
这是我的问题:当我用大数字进行测试时,在F(71)附近会发生一些四舍五入。 根据我的代码,F(71)是308 061 521 170 130,根据WolphramAlpha计算308 061 521 170 129.
因此,最终的总和是错误的。
另外,在测试时我打印出所有数字并识别出偶数数字每3个重复一次。但即使我将它简化为每三个数字的小循环,仍存在问题。
如果我不使用Math.round,我的序列错误......
答案 0 :(得分:0)
double
精度有限。尝试使用BigDecimal
,其精度仅受可用内存大小的限制。
以下是使用BigDecimal
s计算平方根的方法:Square root of BigDecimal in Java
pow()
:Java's BigDecimal.power(BigDecimal exponent): Is there a Java library that does it?
舍入:Java BigDecimal: Round to the nearest whole value
加法和除法等其他操作作为方法内置于BigDecimal
。