参考《计算物理学》刘金远,科学出版社,上面有你需要的东西。
或者有一本开篇的是讲Fortran的《计算物理学》,也可以解答你的问题。
#include <iostream>
float f(float x){
return x*x - 2;
}
float solve(float a, float b, float(*f)(float x), float delta){
float mid = a + (b-a)/2.0;
float left_f=f(a), right_f=f(b), mid_f=f(mid);
if (0 == left_f) return a;
if (0 == right_f) return b;
if (delta >= abs(mid_f-0)) return mid; // 中间点符合作为零点的条件
if (left_f*mid_f < 0){
// 说明在(a, mid)区间内有零点
return solve(a, mid, f, delta);
}else if (mid_f*right_f<0){
// 说明在(mid, b)区间内有零点
return solve(mid, b, f, delta);
}else{
// 无法判断有没有零点
return -1;
}
}
int main() {
std::cout << solve(0, 2, f, 0.01) << std::endl;
return 0;
}