小编AWS*_*WSM的帖子

为什么C为此算法赋予Python不同的值?

我在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)

c math linear-interpolation

1
推荐指数
1
解决办法
101
查看次数

标签 统计

c ×1

linear-interpolation ×1

math ×1