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

C++ C++;没有标准函数的立方根查找器,c++,sqrt,C++,Sqrt,我正在做一个程序,找到给定数字的立方根 我不想不使用pow(),或者只想在这里写num*num*num,但这并不重要。方法,我必须这样做,就像下面代码中的方法一样 我不知道,问题出在哪里。它适用于立方数(1,8,27,64),但其他数不适用。 代码如下: cout << "Cube root"; cout << "Enter a number: "; int x; double num = 0; cin &g

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

我不想不使用
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;
coutx;
while(true){
如果(功率(num+1,3)>x){
如果(功率(num+0.1,3)>x){
如果(功率(num+0.01,3)>x){
如果(功率(num+0.001,3)>x){
打破
}
}
else{num+=0.01;}
}
else{num+=0.1;}
}
else{num+=1;}
}

cout您只需执行以下操作即可获得一个非常简单的解决方案:
这相当于获取多维数据集的根

pow(num+0.0, 1.0/3.0);
我知道,但我必须使用代码中的方法来完成它。

此时

if(功率(num+0.01,3)>x){
如果(功率(num+0.001,3)>x){
打破
}
}
else{num+=0.01;}
如果num+0.001不高,但例如num+0.002(当然也可以是num+0.01),则会变成一个无止境的循环

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

我喜欢这个解决方案(最初的猜测只是值的一半,但您可以使用小于值且大于0的任何值)


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

请提供一个缩进,该缩进显示成功和失败,无需输入。即,请硬编码一些示例。显示输出和所需输出。@Evg我认为这与效率或优化无关。它是关于调试的。如果您可以使用
std::pow
那么为什么不直接使用它来计算多维数据集的根呢?如果你说“…没有标准函数…”,那么我认为你需要另一种不使用
std::pow
的方法。你所说的“输出:(无)”是什么意思?崩溃吊死?无止境循环?尝试在
break;}之后插入
else{num+=0.001;}
。您错过了OPs注释中的一条,该注释在
pow()
中明确排除(重新表述)带有分馏的解决方案。但是如果不使用任何“pow()”,就不可能做到这一点,即使OPs代码使用了“pow()”,正如OP所解释的那样,
pow(X,3)
的使用也很容易被替换。在明显的范围内(精确到小数点后3或4位,不需要速度),这是可能的。请参见我的回答下的评论。OP未正确获取注释中的格式。他们的意思当然是
num*num*num
。我的荣幸。你知道吗?它不要求你接受答案。但在你发表评论之后,解释为什么不可能是个问题嗯。如果是这样的话,我会在我的答案旁边看到一个绿色的大“勾号”,你的声誉会提高。这就是为什么我怀疑你是否接受了我提供的链接中描述的含义。这就是我的意思,你找到了。对不起,打扰你了。我希望这感觉像是对StackOverflow想法的帮助。我不打算惩罚你。(不过,我承认我现在感到很满意。)对不起,我没有看到那么大✔在第一次找到它时需要一些帮助是正常的。祝您在StackOverflow上的未来参与好运。这是对“如何优化我的立方根查找器?”问题的另一个答案,hoever并不是这里实际提出的问题。