【发布时间】:2011-05-04 10:29:31
【问题描述】:
我想找到正弦函数的零点。参数是一个区间 [a,b]。我必须类似于二进制搜索。
实现一个函数,在 a 和 b 之间的区间内搜索 sinus 函数中的空点。 search-interval[lower limit, upper limit] 应该减半,直到下限和上限之间的距离小于 0.0001。
这是我的代码:
public class Aufg3 {
public static void main(String[] args) {
System.out.println(zeropoint(5,8));
}
private static double zeropoint(double a, double b){
double middle = (a + b)/2;
if(Math.sin(middle) < 0){
return zeropoint(a,middle);
}else if(Math.sin(middle) > 0){
return zeropoint(middle,b);
}else{
return middle;
}
}
}
它给了我很多错误 return zeropoint(middle,b);
第一步,我只想找到区间中的第一个零点。
有什么想法吗?
【问题讨论】:
-
也许您应该为当前交替命名为
middle和mitte的变量的所有用途使用相同的名称? -
另外,您目前正在呼叫
Math.sin两次。这是一个昂贵的函数,将调用分解为一个是一种很好的风格。 -
另外,你永远不会得到 Math.sin() == 0。它是 double 和 double 几乎永远不能与 0 进行比较。像 abs(Math.sin(mitte))
-
@Vladimir,好吧,练习说直到下限和上限彼此之间的距离小于 0.0001 所以我会在
b-a < 0.0001时终止递归。 (见my answer。) -
是的,弗拉基米尔说的。如果 b-a
标签: java math recursion binary-search