Skip to main content

Acos

Defined in header <cmath>.

Description​

Computes the principal value of the arc cosine of num. The library provides overloads of std::acos for all cv-unqualified floating-point types as the type of the parameter num.  (since C++23)
Additional Overloads are provided for all integer types, which are treated as double.  (since C++11)

Declarations​

// 1)
/* floating-point-type */ acos( /* floating-point-type */ num );
// 2)
float acosf( float num );
// 3)
long double acosl( long double num );
Additional Overloads
// 4)
template< class Integer >
double acos ( Integer num );

Parameters​

​num - floating-point or integer value

Return value​

If no errors occur, the arc cosine of num (arccos(num)) in the range [0, π], is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

Error handling​

Errors are reported as specified in math_errhandling.

Domain error occurs if num is outside the range [-1.0, 1.0]

If the implementation supports IEEE floating-point arithmetic (IEC 60559):

If the argument is +1, the value +0 is returned. If |num| > 1, a domain error occurs and NaN is returned. if the argument is NaN, NaN is returned.

Notes​

The additional overloads are not required to be provided exactly as Additional Overloads. They only need to be sufficient to ensure that for their argument num of integer type, std::acos(num) has the same effect as std::acos(static_cast<double>(num)).

Examples​

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>

// #pragma STDC FENV_ACCESS ON

int main()
{
std::cout
<< "acos(-1) = "
<< acos(-1) << '\n'
<< "acos(0.0) = "
<< acos(0.0) << '\n'
<< "2*acos(0.0) = "
<< 2 * acos(0) << '\n'
<< "acos(0.5) = "
<< acos(0.5) << '\n'
<< "3*acos(0.5) = "
<< 3 * acos(0.5) << '\n'
<< "acos(1) = "
<< acos(1) << '\n';

// error handling
errno = 0;
std::feclearexcept(FE_ALL_EXCEPT);

std::cout
<< "acos(1.1) = "
<< acos(1.1) << '\n';

if (errno == EDOM)
std::cout
<< "errno == EDOM: "
<< std::strerror(errno) << '\n';
if (std::fetestexcept(FE_INVALID))
std::cout
<< "FE_INVALID raised" << '\n';
}

Result
acos(-1) = 3.14159
acos(0.0) = 1.5708
2*acos(0.0) = 3.14159
acos(0.5) = 1.0472
3*acos(0.5) = 3.14159
acos(1) = 0
acos(1.1) = nan
errno == EDOM: Numerical argument out of domain
FE_INVALID raised

Acos

Defined in header <cmath>.

Description​

Computes the principal value of the arc cosine of num. The library provides overloads of std::acos for all cv-unqualified floating-point types as the type of the parameter num.  (since C++23)
Additional Overloads are provided for all integer types, which are treated as double.  (since C++11)

Declarations​

// 1)
/* floating-point-type */ acos( /* floating-point-type */ num );
// 2)
float acosf( float num );
// 3)
long double acosl( long double num );
Additional Overloads
// 4)
template< class Integer >
double acos ( Integer num );

Parameters​

​num - floating-point or integer value

Return value​

If no errors occur, the arc cosine of num (arccos(num)) in the range [0, π], is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

Error handling​

Errors are reported as specified in math_errhandling.

Domain error occurs if num is outside the range [-1.0, 1.0]

If the implementation supports IEEE floating-point arithmetic (IEC 60559):

If the argument is +1, the value +0 is returned. If |num| > 1, a domain error occurs and NaN is returned. if the argument is NaN, NaN is returned.

Notes​

The additional overloads are not required to be provided exactly as Additional Overloads. They only need to be sufficient to ensure that for their argument num of integer type, std::acos(num) has the same effect as std::acos(static_cast<double>(num)).

Examples​

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>

// #pragma STDC FENV_ACCESS ON

int main()
{
std::cout
<< "acos(-1) = "
<< acos(-1) << '\n'
<< "acos(0.0) = "
<< acos(0.0) << '\n'
<< "2*acos(0.0) = "
<< 2 * acos(0) << '\n'
<< "acos(0.5) = "
<< acos(0.5) << '\n'
<< "3*acos(0.5) = "
<< 3 * acos(0.5) << '\n'
<< "acos(1) = "
<< acos(1) << '\n';

// error handling
errno = 0;
std::feclearexcept(FE_ALL_EXCEPT);

std::cout
<< "acos(1.1) = "
<< acos(1.1) << '\n';

if (errno == EDOM)
std::cout
<< "errno == EDOM: "
<< std::strerror(errno) << '\n';
if (std::fetestexcept(FE_INVALID))
std::cout
<< "FE_INVALID raised" << '\n';
}

Result
acos(-1) = 3.14159
acos(0.0) = 1.5708
2*acos(0.0) = 3.14159
acos(0.5) = 1.0472
3*acos(0.5) = 3.14159
acos(1) = 0
acos(1.1) = nan
errno == EDOM: Numerical argument out of domain
FE_INVALID raised