C 中的复杂数据类型给算法带来麻烦

标签 c numbers

我正在尝试执行涉及以下 C 函数的计算:

long double complex* tridiag_thomas(long double complex *a, long double complex *b, long double complex *c, long double complex *f, int N) {

    long double complex *v; v = (long double complex *)malloc(sizeof(long double complex) * N);
    long double complex *y; y = (long double complex *)malloc(sizeof(long double complex) * N);

    long double complex w;

    int k;

    for (k = 0; k < N; k++) {
        y[k] = 0;
        v[k] = 0;
    }
    w = a[0];
    y[0] = f[0] / w;
    for (k = 1; k < N; k++) {
        v[k - 1] = c[k - 1] / w;
        w = a[k] - b[k] * v[k - 1];
        y[k] = (f[k] - b[k] * y[k - 1]) / w;
    }
    for (k = N - 2; k >= 0; k--) {
        y[k] = y[k] - v[k] * y[k + 1];
    }
    return y;
}

我通过这个函数(f)传递一个矩阵,找到 y,用 y 修改 f,然后再次通过该函数传递新的 f。我这样做了大约 1000 次。当使用实际值时(并对 long double 复数 -> long double 进行必要的更改),此函数按预期工作。然而,当以上述形式与复杂参数一起使用它时,结果很快就会发散到无穷大。

有人能告诉我为什么会这样吗?我对编程并不陌生,但对 C 语言很陌生。

最佳答案

确实发现了泄漏“v”的问题。这让我怀疑你没有遵循上层的c风格分配。我们没有上层代码。

y什么时候被释放?赋值是否循环遍历所有值,或者您是否正在执行 C++ 样式赋值?请记住,除了编译器内置的类型之外,C 中的分配、赋值和释放并不是免费的。

关于C 中的复杂数据类型给算法带来麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117518/

相关文章:

php - 我怎样才能平均分割一组数字

c - 将 union 作为宏中的两个参数之一传递

c - 如何在 c 中打印字符的十进制表示形式?

c - 调用 stat 后权限覆盖

c - 使用 GNU SGL 库生成随机数

android - 'sizeof(off_t) != 8' 在为 android 编译 libfuse 时

r - 如何使用R将数字提取为数字?

javascript - 如何防止字符串值在转换为数字值时四舍五入?

php - 如何停止 str_replace() 替换替换?

php - 如何将 php 中的数字格式化为 1,000 到 1k