std::cbrt, std::cbrtf, std::cbrtl
From cppreference.com
Defined in header <cmath> | ||
(1) | ||
float cbrt (float num ); double cbrt (double num ); | (until C++23) | |
/*floating-point-type*/ cbrt (/*floating-point-type*/ num ); | (since C++23) (constexpr since C++26) | |
float cbrtf(float num ); | (2) | (since C++11) (constexpr since C++26) |
longdouble cbrtl(longdouble num ); | (3) | (since C++11) (constexpr since C++26) |
SIMD overload(since C++26) | ||
Defined in header <simd> | ||
template</*math-floating-point*/ V > constexpr/*deduced-simd-t*/<V> | (S) | (since C++26) |
Additional overloads(since C++11) | ||
Defined in header <cmath> | ||
template<class Integer > double cbrt ( Integer num ); | (A) | (constexpr since C++26) |
1-3) Computes the cube root of num. The library provides overloads of
std::cbrt
for all cv-unqualified floating-point types as the type of the parameter.(since C++23)S) The SIMD overload performs an element-wise std::cbrt on v_num.
| (since C++26) |
A) Additional overloads are provided for all integer types, which are treated as double. | (since C++11) |
Contents |
[edit]Parameters
num | - | floating-point or integer value |
[edit]Return value
If no errors occur, the cube root of num (3√num), is returned.
If a range error occurs due to underflow, the correct result (after rounding) is returned.
[edit]Error handling
Errors are reported as specified in math_errhandling.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
- if the argument is ±0 or ±∞, it is returned, unchanged.
- if the argument is NaN, NaN is returned.
[edit]Notes
std::cbrt(num) is not equivalent to std::pow(num, 1.0/3) because the rational number1 |
3 |
The additional overloads are not required to be provided exactly as (A). They only need to be sufficient to ensure that for their argument num of integer type, std::cbrt(num) has the same effect as std::cbrt(static_cast<double>(num)).
[edit]Example
Run this code
#include <cmath>#include <iomanip>#include <iostream>#include <limits> int main(){std::cout<<"Normal use:\n"<<"cbrt(729) = "<< std::cbrt(729)<<'\n'<<"cbrt(-0.125) = "<< std::cbrt(-0.125)<<'\n'<<"Special values:\n"<<"cbrt(-0) = "<< std::cbrt(-0.0)<<'\n'<<"cbrt(+inf) = "<< std::cbrt(INFINITY)<<'\n'<<"Accuracy and comparison with `pow`:\n"<<std::setprecision(std::numeric_limits<double>::max_digits10)<<"cbrt(343) = "<< std::cbrt(343)<<'\n'<<"pow(343,1.0/3) = "<<std::pow(343, 1.0/3)<<'\n'<<"cbrt(-343) = "<< std::cbrt(-343)<<'\n'<<"pow(-343,1.0/3) = "<<std::pow(-343, 1.0/3)<<'\n';}
Possible output:
Normal use: cbrt(729) = 9 cbrt(-0.125) = -0.5 Special values: cbrt(-0) = -0 cbrt(+inf) = inf Accuracy and comparison with `pow`: cbrt(343) = 7 pow(343,1.0/3) = 6.9999999999999991 cbrt(-343) = -7 pow(-343,1.0/3) = -nan
[edit]See also
(C++11)(C++11) | raises a number to the given power (xy) (function) |
(C++11)(C++11) | computes square root (√x) (function) |
(C++11)(C++11)(C++11) | computes hypotenuse √x2 +y2 and √x2 +y2 +z2 (since C++17) (function) |
C documentation for cbrt |