我知道如何使用 sqrt
函数获得数字的 _平方根_。
如何获得数字的 _立方根_?
原文由 Hava Darabi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道如何使用 sqrt
函数获得数字的 _平方根_。
如何获得数字的 _立方根_?
原文由 Hava Darabi 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以试试这个 C 算法:
// return a number that, when multiplied by itself twice, makes N.
unsigned cube_root(unsigned n){
unsigned a = 0, b;
for (int c = sizeof(unsigned) * CHAR_BIT / 3 * 3 ; c >= 0; c -= 3) {
a <<= 1;
b = 3 * a * (a + 1) + 1;
if (n >> c >= b)
n -= b << c, ++a;
}
return a;
}
原文由 Michel 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.4k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答917 阅读
1 回答987 阅读
1 回答1k 阅读
1 回答775 阅读
1 回答877 阅读
sqrt
代表“平方根”,“平方根”意味着提高到1/2
的幂。没有“根为 2 的平方根”或“根为 3 的平方根”之类的东西。对于 其他词根,你改变第一个词; 在您的情况下,您正在寻找如何执行 cube rooting 。在 C++11 之前,对此没有具体的功能,但您可以回到第一原则:
std::pow(n, 1/2.)
(或std::sqrt(n)
)std::pow(n, 1/3.)
(或std::cbrt(n)
自 C++11 起)std::pow(n, 1/4.)
如果您希望为
n
传递负值,请避免使用std::pow
解决方案 - 它不支持带小数指数的负输入,这就是为什么std::cbrt
添加了:注意
.
非常重要,因为否则1/3
使用整数除法并导致0
。