我有一个连续的循环,我无法弄清楚它有什么问题

时间:2013-05-03 00:54:52

标签: c floating-point infinite-loop

我的C代码中有一个连续的循环,我无法弄清楚为什么它会以这种方式运行。我觉得我错过了一些值得注意的东西,但我出于某种原因无法看到它。以下是导致循环的代码段:

while (err > 0.0000001) {
    if (err != 1.0) {
        bab = ((2.0*bab) + input/(pow(bab, 2)))/3.0;
        printf("The approximate cube root is %.3lf\n", bab);
        err = input - bab;
    }
    else {
        bab = ((2.0*app) + input/(pow(app, 2)))/3.0;
        printf("The approximate cube root is %.3lf\n", bab);
        err = input - bab;
    }
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

bab(迟早)大约是input的立方根。你设置

err = input - bab;

并测试

while (err > 0.0000001)

因此,如果input > 1 + 3*1e-7(大致),则差异input - cube_root(input)大于您的阈值。

您可能想要设置

err = abs(input - bab*bab*bab);

控制input的立方根的近似值。