std::copysign, std::copysignf, std::copysignl
Определено в заголовке <cmath> |
||
|---|---|---|
| (1) | ||
float copysign ( float mag, float sgn ); double copysign ( double mag, double sgn ); long double copysign ( long double mag, long double sgn ); |
(до C++23) | |
constexpr /* floating-point-type */
copysign ( /* floating-point-type */ mag,
/* floating-point-type */ sgn );
|
(с C++23) | |
float copysignf( float mag, float sgn ); |
(2) | (с C++11) (constexpr с C++23) |
long double copysignl( long double mag, long double sgn ); |
(3) | (с C++11) (constexpr с C++23) |
| Дополнительные перегрузки (с C++11) | ||
Определено в заголовке <cmath> |
||
template< class Integer > double copysign ( Integer mag, Integer sgn ); |
(A) | (constexpr с C++23) |
mag и знаком sgn. Библиотека предоставляет перегрузки std::copysign для всех типов с плавающей точкой без квалификаторов cv в качестве типа параметров.(с C++23)
| A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double. | (с C++11) |
Параметры
| mag, sgn | - | значения с плавающей точкой или целые числа |
Возвращаемое значение
Если ошибки не возникло, возвращается значение с плавающей точкой с модулем mag и знаком sgn.
Если mag — NaN, возвращается NaN со знаком sgn.
Если sgn равно -0, результат будет отрицательным только в том случае, если реализация поддерживает подписанный ноль последовательно в арифметических операциях.
Обработка ошибок
Эта функция не подвержена каким-либо ошибкам, указанным в math_errhandling.
Если реализация поддерживает IEEE арифметику с плавающей точкой (IEC 60559),
- Возвращаемое значение точное (
FE_INEXACTникогда не поднимается) и не зависит от текущего режима округления.
Примечания
std::copysign — единственный переносимый способ изменить знак значения NaN (для проверки знака NaN также можно использовать std::signbit).
Дополнительные перегрузки не требуются, чтобы быть предоставленными именно как (A). Они должны быть достаточны, чтобы обеспечить, что для их первого аргумента num1 и второго аргумента num2:
|
(до C++23) |
| Если Если такого типа с плавающей точкой с наибольшим рангом и подрангом не существует, то разрешение перегрузки не приводит к доступному кандидату из предоставляемых перегрузок. |
(с C++23) |
Пример
#include <cmath>
#include <iostream>
int main()
{
std::cout << std::showpos
<< "copysign(1.0,+2.0) = " << std::copysign(1.0, +2.0) << '\n'
<< "copysign(1.0,-2.0) = " << std::copysign(1.0, -2.0) << '\n'
<< "copysign(inf,-2.0) = " << std::copysign(INFINITY, -2.0) << '\n'
<< "copysign(NaN,-2.0) = " << std::copysign(NAN, -2.0) << '\n';
}Вывод:
copysign(1.0,+2.0) = +1 copysign(1.0,-2.0) = -1 copysign(inf,-2.0) = -inf copysign(NaN,-2.0) = -nan
См. также
|
(C++11)(C++11) |
абсолютное значение значения с плавающей точкой (\(\small{|x|}\)|x|) (функция) |
|
(C++11) |
проверяет, является ли заданное число отрицательным (функция) |
Документация на C для copysign |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/copysign