std::acos, std::acosf, std::acosl
Определён в заголовочном файле <cmath> | ||
|---|---|---|
float acos ( float num ); double acos ( double num ); long double acos ( long double num ); | (1) | (до C++23) |
/*floating-point-type*/
acos ( /*floating-point-type*/ num );
|
(начиная с C++23) (constexpr начиная с C++26) | |
float acosf( float num ); | (2) |
(начиная с C++11) (constexpr начиная с C++26) |
long double acosl( long double num ); | (3) |
(начиная с C++11) (constexpr начиная с C++26) |
| Перегрузка SIMD (начиная с C++26) | ||
Определён в заголовочном файле <simd> | ||
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
acos ( const V& v_num );
| (S) | (начиная с C++26) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определён в заголовочном файле <cmath> | ||
template< class Integer > double acos ( Integer num ); | (A) | (constexpr начиная с C++26) |
num. Библиотека предоставляет перегрузки std::acos для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра.(начиная с C++23)
S) Перегрузка SIMD поэлементно вычисляет std::acos для v_num. (Определения см. в math-floating-point и deduced-simd-t.) | (начиная с C++26) |
| A) Для всех целочисленных типов предоставляются дополнительные перегрузки, которые обрабатываются как double. | (начиная с C++11) |
Параметры
| num | - | значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
Если ошибок не возникает, возвращается арккосинус от num (arccos(num)) в диапазоне [0, π].
Если возникает ошибка области определения, возвращается значение, определяемое реализацией (NaN, если поддерживается).
Если возникает ошибка диапазона из-за потери точности при денормализации, возвращается правильный результат (после округления).
Обработка ошибок
Об ошибках сообщается согласно math_errhandling.
Ошибка области определения возникает, если num находится вне диапазона [-1.0, 1.0].
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Если аргумент равен +1, возвращается значение
+0. - Если |num| > 1, возникает ошибка области определения и возвращается NaN.
- Если аргумент — NaN, возвращается NaN.
Примечания
Необязательно предоставлять дополнительные перегрузки в точности в виде (A). Они должны лишь обеспечивать, чтобы для аргумента num целочисленного типа std::acos(num) имел тот же эффект, что и std::acos(static_cast<double>(num)).
Пример
#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';
}
Вывод:
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
См. также
|
(C++11)(C++11) | вычисляет арксинус (\({\small\arcsin{x}}\)arcsin(x)) (функция) |
|
(C++11)(C++11) | вычисляет арктангенс (\({\small\arctan{x}}\)arctan(x)) (функция) |
|
(C++11)(C++11) | арктангенс; знаки используются для определения квадрантов (функция) |
|
(C++11)(C++11) | вычисляет косинус (\({\small\cos{x}}\)cos(x)) (функция) |
|
(C++11) | вычисляет арккосинус комплексного числа (\({\small\arccos{z}}\)arccos(z)) (шаблон функции) |
применяет функцию std::acos к каждому элементу valarray (шаблон функции) |
|
Документация по C для acos |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/acos