没有标准函数的 C++ 立方根查找器

C++ cube root finder without standard functions

我正在编写一个程序,用于计算给定数字的立方根。

我不希望使用 pow(),或者仅以我也可以在此处编写的方式 num * num * num,但这并不重要。我必须这样做的方法就像下面代码中的方法。

不知道,问题出在哪里。它适用于立方数 (1,8,27,64),但不适用于其他数字。 这是代码:

        cout << "Cube root";
        cout << "Enter a number: ";
        int x; double num = 0;
        cin >> x;
        while (true) {
            if (pow(num + 1, 3) > x) {
                if (pow(num + 0.1, 3) > x) {
                    if (pow(num + 0.01, 3) > x) {
                        if (pow(num + 0.001, 3) > x) {
                            break;
                        }
                    }
                    else { num += 0.01; }
                }
                else { num += 0.1; }
            }
            else { num += 1; }

        }
        cout << num;

例如:
输入:8 输出:2
输入:64 输出:4
输入:12 输出:(none)
输入:12340 输出:(none)

"Output: (none)"表示没有崩溃,不过我觉得是死循环。

您只需执行以下操作即可获得非常简单的解决方案:
这相当于求立方根。

pow(num+0.0, 1.0/3.0);

我知道,但我必须按照代码中的方法来做。

此时

if (pow(num + 0.01, 3) > x) {
    if (pow(num + 0.001, 3) > x) {
        break;
    }
}
else { num += 0.01; }

如果 num + 0.001 不更高,你就会陷入无限循环,但是例如num + 0.002(当然也可以是 num + 0.01)。

break;}之后插入一个else { num += 0.001; }

我喜欢这个解决方案(第一次猜测只是一个值的一半,但你可以使用任何小于该值且大于 0 的值) https://wandbox.org/permlink/4kYBkJomEGWbc5ay

它使用泰勒级数来逼近立方根的值,应该比线性incrementing/decrementing猜测值更快。