没有标准函数的 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猜测值更快。
我正在编写一个程序,用于计算给定数字的立方根。
我不希望使用 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猜测值更快。