double findaroot(double x1, double x2){ //finds the root between two values
double gap = Math.abs(x1 - x2); //find the initial interval
while(gap > INTERVAL) { //check for precision
gap = gap / 2; //halve the interval
double x3 = x1 + gap;
if (f(x3) == 0) { //check for symmetry
return x3;
} else if (Math.signum(f(x1)) == Math.signum(f(x3))){
x1 = x3; //redefine the interval
} else {
x2 = x3; //redefine the interval
}
findaroot(x1, x2); //call again
}
return (x1 + x2) / 2; //return the mean
}
我试图在区间(-143、0.222222)中找到 f(x)=-21x^2+10x-1 的解决方案。指导方针规定我应该实施一个二分法来解决这个问题。目前,此方法适用于我必须通过的 10 个测试用例中的 8 个,但对于上述值,它会给出“超出时间限制”错误。给定间隔之间的精度水平至少为“0.000001”的情况下,近似根需要 15 秒。
我不确定如何在不改变方法的情况下提高效率。我已经实现了霍纳的计算函数的方法,因为Math.pow(x1, x2)
它花费的时间太长。