这是我的代码:
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) 但最终我得到了这个:
如何让我的范围正常工作?这是愚蠢的问题之一:)
最佳答案
您需要了解浮点的工作原理 - 它具有有限的分辨率,并且您的 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/