std:: copysign, std:: copysignf, std:: copysignl
|
Определено в заголовочном файле
<cmath>
|
||
| (1) | ||
|
float
copysign
(
float
mag,
float
sgn
)
;
double
copysign
(
double
mag,
double
sgn
)
;
|
(до C++23) | |
|
constexpr
/*floating-point-type*/
copysign
(
/*floating-point-type*/
mag,
|
(начиная с 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) |
|
SIMD перегрузка
(начиная с C++26)
|
||
|
Определено в заголовочном файле
<simd>
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (начиная с C++26) |
|
Дополнительные перегрузки
(начиная с C++11)
|
||
|
Определено в заголовочном файле
<cmath>
|
||
|
template
<
class
Integer
>
double copysign ( Integer mag, Integer sgn ) ; |
(A) | (constexpr начиная с C++23) |
std::copysign
для всех неквалифицированных cv типов с плавающей точкой в качестве типа параметров.
(начиная с C++23)
|
S)
Перегрузка SIMD выполняет поэлементное применение
std::copysign
к
v_mag
и
v_sgn
.
|
(since C++26) |
|
A)
Дополнительные перегрузки предоставляются для всех целочисленных типов, которые трактуются как
double
.
|
(since 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) |
|
Если
num1
и
num2
имеют арифметические типы, то
std
::
copysign
(
num1, num2
)
имеет тот же эффект, что и
std
::
copysign
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
Если такого типа с плавающей запятой с наибольшим рангом и подрангом не существует, то разрешение перегрузки не приводит к пригодному кандидату из предоставленных перегрузок. |
(начиная с 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)
|
абсолютное значение числа с плавающей точкой (
|x|
)
(функция) |
|
(C++11)
|
проверяет, является ли данное число отрицательным
(функция) |
|
Документация C
для
copysign
|
|