33

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

如何获得数字的立方根

4

9 回答 9

62

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.

于 2013-08-07T12:49:06.020 回答
8

在 C++11std::cbrt中作为数学库的一部分引入,您可以参考

于 2013-08-07T12:49:33.983 回答
2
include <cmath>
std::pow(n, 1./3.)

此外,在 C++11cbrt中有相同的标头。

傻瓜数学

于 2013-08-07T12:48:57.193 回答
0

x 的第 n 个根等于 x^(1/n),所以使用std::pow. 但我不明白这与运算符重载有什么关系。

于 2013-08-07T12:48:57.163 回答
0
  1. sqrt()不是运算符。
  2. 你不能超载sqrt()

请解释为什么你需要超载sqrt(),以便我们可以帮助你做你想做的事。

于 2013-08-07T12:57:39.087 回答
0

只是指出这一点,虽然我们可以同时使用这两种方式,但

 long long res = pow(1e9, 1.0/3);
 long long res2 = cbrt(1e9);
 cout<<res<<endl;
 cout<<res2<<endl;

返回

999
1000

因此,为了使用 pow 函数获得正确的结果,我们需要使用实际数字添加 0.5 的偏移量或使用双精度数据类型,即

long long res = pow(1e9+0.5, 1.0/3)
double res = pow(1e9, 1.0/3)

这里有更详细的解释C++ pow 异常类型转换

于 2022-01-15T11:07:51.977 回答
-1

这个问题的解决方案是

cube_root = pow(n,(float)1/3);

你应该#include <math.h>图书馆文件

旧的 C/C++ 标准不支持 cbrt() 函数。

当我们像cube_root = pow(n,1/3);编译器认为的那样编写代码时1/3 = 0(C/C++ 中的除法问题),所以你需要使用 typecasting(float)1/3才能得到正确的答案

#include<iostream.h>
#include<conio.h>
#include<math.h>
using namespace std;

int main(){
float n = 64 , cube_root ;
clrscr();
cube_root = pow(n , (float)1/3);
cout<<"cube root = "<<cube_root<<endl;
getch();
return 0;
}

立方根 = 4

于 2019-07-31T06:27:31.407 回答
-1

我会劝阻上述任何一种方法,因为它们对我不起作用。我做了 pow(64, 1/3.) 和 pow(64, 1./3.) 但我得到的答案是 3
这是我的逻辑。

ans = pow(n, 1/3.);
if (pow(ans, 3) != n){
   ans++;
}
于 2017-06-28T04:19:23.547 回答
-1

实际上,这一轮必须进行上述解决方案才能发挥作用。

正确的解决方案是

ans = round(pow(n, 1./3.));

于 2017-07-31T17:29:00.720 回答