std::acos,s...f,std::acosl(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay bestie, welcome to the C++ Standard Libary manual, section 3 β€” this is the std::acos,s...f,std::acosl(3) page, and lowkey we're about to make arc cosine make sense, no cap. The NAME line is literally:

  • std::acos, std::acosf, std::acosl β€” std::acos,std::acosf,std::acosl.

✨ Synopsis ✨

The synopsis is giving β€œdefined in header <cmath>” and a whole overload family, so here it is exactly, no edits β€” periodt:

Defined in header <cmath>
float       acos ( float num );

double      acos ( double num );                            (until C++23)

long double acos ( long double num );
/* floating-point-type */                                   (since C++23)
            acos ( /* floating-point-type */ num );
(constexpr since C++26)
float       acosf( float num );                     (1) (2) (since C++11)
                                                              (constexpr since C++26)
long double acosl( long double num );                   (3) (since C++11)
                                                              (constexpr since C++26)
Additional overloads (since C++11)
Defined in header <cmath>
template< class Integer >                               (A)
(constexpr since C++26)
double      acos ( Integer num );

1-3) Computes the principal value of the arc cosine of num. slay.

The library provides overloads of std::acos for all cv-unqualified floating-point types as the type of the parameter. (since C++23) β€” highkey iconic.

A) Additional overloads are provided for all integer types, which are treated as double. (since C++11)

πŸŽ€ Parameters πŸŽ€

Just one parameter, and she's flexible:

  • num β€” floating-point or integer value.

🌸 Return value 🌸

bestie, 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 πŸ’…

this is the error-handling corner, so keep your eyes here, fr fr. 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), then:

  • 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 πŸ¦‹

ngl, this note is short but important: 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::acos(num) has the same effect as std::acos(static_cast<double>(num)).

🌈 Example 🌈

The example ate, fr fr β€” here it is exactly:

// Run this code

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

// #pragma STDC FENV_ACCESS ON

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

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

    std::cout << "acos(1.1) = " << std::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';
}

Output:

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

⭐ See also ⭐

The see-also section is a whole friend group:

  • asin, asinf, asinl β€” computes arc sine (\({\small\arcsin{x}}\)arcsin(x)) (function) (C++11) (C++11)
  • atan, atanf, atanl β€” computes arc tangent (\({\small\arctan{x}}\)arctan(x)) (function) (C++11) (C++11)
  • atan2, atan2f, atan2l β€” arc tangent, using signs to determine quadrants (function) (C++11) (C++11)
  • cos, cosf, cosl β€” computes cosine (\({\small\cos{x}}\)cos(x)) (function) (C++11) (C++11)
  • acos(std::complex) β€” computes arc cosine of a complex number (\({\small\arccos{z}}\)arccos(z)) (C++11) (function template)
  • acos(std::valarray) β€” applies the function std::acos to each element of valarray (function template)
  • C documentation for acos

source/version check: http://cppreference.com, dated 2024.06.10, footer title std::acos,s...f,std::acosl(3) β€” mwah, bye bestie! πŸ’œ

πŸ“¦ where this page comes from