求各种精英算一下实在不会😭

img

参考《计算物理学》刘金远,科学出版社,上面有你需要的东西。
或者有一本开篇的是讲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;
}