没有标准功能的C ++多维数据集根查找器

问题描述 投票:2回答:3

我正在编写一个程序,找到给定数字的立方根。

[如果不使用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输出:(无)输入:12340输出:(无)

“输出:(无)”表示没有崩溃,但我认为存在无限循环。

c++ sqrt
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)。

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


1
投票

只需执行以下操作,便可以得到一个非常简单的解决方案:这等效于获得多维数据集的根。

pow(num+0.0, 1.0/3.0);

我知道,但是我必须使用代码中的方法来完成它。


0
投票

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

它使用泰勒级数来近似立方根的值,并且应该比线性递增/递减猜测值要快。

© www.soinside.com 2019 - 2024. All rights reserved.