c - if(数学函数)中的范围错误

标签 c console-application

这是我的代码:

dx = (to - from) / n;
x = from - dx;

printf("\n\n          X           math.h           szereg      i  abortReason\n\n");

while(x <= to) {
    x += dx;

    if(x > -1. && x <= 1.) {
        printf("%11lf %16lf %16lf", x, log(1 + x), myFunc(x, epsilon, m, &abort));
        printf(" %7d  %s\n", abort, getAbortReason(abort, &m));
    } else {
        notInScope++;
    }
}

我创建了 if 条件,因为我的数学函数具有范围 (-1 < x <= 1) 但最终我得到了这个:

enter image description here

如何让我的范围正常工作?这是愚蠢的问题之一:)

最佳答案

您需要了解浮点的工作原理 - 它具有有限的分辨率,并且您的 dx 值无法完全表示。

您可以更改循环:

while(x <= to) {
    x += dx;

    // ...
}

至:

for (i = 0; i <= n; ++i)
{
    x = from + (double)i * dx;

    // ...
}

这可以确保您获得正确的范围和正确的增量数,并且还可以最大限度地减少舍入误差。

关于c - if(数学函数)中的范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216221/

相关文章:

c - Linux的C语言中的进程(Ubuntu)

c - 有没有办法在不执行代码的情况下检查库是否是为小端或大端架构构建的?

c++ - Visual Studio跳过多个if语句?

FreeBasic 中带有 ScreenRes 的 C++ 等价函数

c# - 获取控制台应用程序以允许多次输入

vb.net - 在 Visual Basic 中列出?

c - 为什么在 C 中使用宏?

c - 如何防止缓冲区溢出

c - 声明空数组

java - 在框架内打印框架