我在C中写了一个简短的程序来执行线性插值,它迭代给出一个函数的根到给定的小数点数.到目前为止,对于函数f(x):
long double f(long double x) {
return (pow(x, 3) + 2 * x - 8);
}
Run Code Online (Sandbox Code Playgroud)
该程序无法收敛到1dp值.程序更新变量a和b,f(x)的根位于变量a和b之间,直到a和b都以给定的精度舍入到相同的数字.使用long double和上面的函数,调试器显示前2次迭代:
a = 1.5555555555555556
a = 1.6444444444444444
Run Code Online (Sandbox Code Playgroud)
虽然应该是:
a = 1.5555555555555556
a = 1.653104925053533
Run Code Online (Sandbox Code Playgroud)
在此之后,程序无法更新值.我正在使用的线性插值方程是这里给出的数学方法的重新排列版本,我使用的代码是我编写的python程序的C版本.尽管算法相同,为什么C实现会得到不同的值,我该如何解决?
好吧,我仍然掌握这一点,但希望下面我有一个最小的,完整的,可验证的例子:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
long double a; long double b; long double c; // The values for interpolation
long double fofa; long double fofb; long double fofc; // The values f(a), f(b) and f(c)
const int dp = 1; // The number …Run Code Online (Sandbox Code Playgroud)