我对连续分数的理解是它总是以分数形式给出小数的表示。我认为连续分数总是返回小于或等于十进制数的值。不幸的是,我的代码偶尔会返回大于十进制输入的小数值。
我对连续分数的理解是否正确?如果是这样,请解释我的代码中的错误所在。
public static Rational contFrac(double a, int i,int n){
if(i<n){
boolean neg = false;
if(a<0){
neg = true;//need a helper method to take care of this
}
double reci = Math.abs(1/a);//the reciprocal of a given decimal value
double remain = reci%1;//the decimal portion of the reciprocal
double intprt = reci - remain;//the 'integer' portion of the reciprocal
Rational inter = new Rational((long)intprt);//creates a new rational number using the 'integer' portion of the reciprocal
if(remain !=0){
inter = inter.add(contFrac(remain,i+1,n));
}
return (reciprocal(inter));//gets the reciprocal of a rational number
}
else{
return new Rational(0);
}
}
答案 0 :(得分:2)
我确定计算机正在围绕您的1/a
。
答案 1 :(得分:1)
连续分数的收敛在大于和小于极限之间交替。因此,您的观察行为是可以预期的。
或换句话说,限制总是在两个连续的收敛之间。