如何在 C 中获得立方根?

新手上路,请多包涵

我知道如何使用 sqrt 函数获得数字的 _平方根_。

如何获得数字的 _立方根_?

原文由 Hava Darabi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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 添加了:

 std::cout << std::pow(-8, 1/3.) << '\n';  // Output: -nan
std::cout << std::cbrt(-8)      << '\n';  // Output: -2


注意 . 非常重要,因为否则 1/3 使用整数除法并导致 0

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题