我知道如何使用该函数获得数字的平方根。sqrt
如何获得数字的立方根?
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
.
在 C++11std::cbrt
中作为数学库的一部分引入,您可以参考
x 的第 n 个根等于 x^(1/n),所以使用std::pow
. 但我不明白这与运算符重载有什么关系。
sqrt()
不是运算符。sqrt()
。请解释为什么你需要超载sqrt()
,以便我们可以帮助你做你想做的事。
只是指出这一点,虽然我们可以同时使用这两种方式,但
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 异常类型转换
这个问题的解决方案是
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
我会劝阻上述任何一种方法,因为它们对我不起作用。我做了 pow(64, 1/3.) 和 pow(64, 1./3.) 但我得到的答案是 3
这是我的逻辑。
ans = pow(n, 1/3.);
if (pow(ans, 3) != n){
ans++;
}
实际上,这一轮必须进行上述解决方案才能发挥作用。
正确的解决方案是
ans = round(pow(n, 1./3.));