我正在编写一个程序,找到给定数字的立方根。
[如果不使用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输出:(无)
“输出:(无)”表示没有崩溃,但我认为存在无限循环。
此时
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;}
。
只需执行以下操作,便可以得到一个非常简单的解决方案:这等效于获得多维数据集的根。
pow(num+0.0, 1.0/3.0);
我知道,但是我必须使用代码中的方法来完成它。
我喜欢这种解决方案(首先猜测只是一个值的一半,但是您可以使用任何小于value且大于0的值)https://wandbox.org/permlink/4kYBkJomEGWbc5ay
它使用泰勒级数来近似立方根的值,并且应该比线性递增/递减猜测值要快。