copysign, copysignf, copysignl
Определено в заголовочном файле <math.h> | ||
|---|---|---|
float copysignf( float x, float y ); | (1) | (с C99) |
double copysign( double x, double y ); | (2) | (с C99) |
long double copysignl( long double x, long double y ); | (3) | (с C99) |
Определено в заголовочном файле <tgmath.h> | ||
#define copysign(x, y) | (4) | (с C99) |
1-3) Создаёт значение с плавающей точкой с модулем
x и знаком y.
4) Универсальный макрос типа: Если какой-либо аргумент имеет тип
long double, вызывается copysignl. В противном случае, если какой-либо аргумент имеет целочисленный тип или тип double, вызывается copysign. В противном случае, вызывается copysignf. Параметры
| x, y | - | значения с плавающей точкой |
Возвращаемое значение
Если ошибки не произошли, возвращается значение с плавающей точкой с модулем x и знаком y.
Если x является NaN, возвращается NaN со знаком y.
Если y равно -0, результат отрицательный только если реализация поддерживает подписанный ноль в арифметических операциях.
Обработка ошибок
Эта функция не имеет ошибок, определённых в math_errhandling.
Если реализация поддерживает IEEE арифметику с плавающей точкой (IEC 60559),
- Возвращаемое значение является точным (
FE_INEXACTникогда не поднимается) и не зависит от текущего режима округления.
Примечания
copysign — единственный переносимый способ манипулирования знаком значения NaN (для проверки знака NaN также можно использовать signbit).
Пример
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("copysign(1.0,+2.0) = %+.1f\n", copysign(1.0,+2.0));
printf("copysign(1.0,-2.0) = %+.1f\n", copysign(1.0,-2.0));
printf("copysign(INFINITY,-2.0) = %f\n", copysign(INFINITY,-2.0));
printf("copysign(NAN,-2.0) = %f\n", copysign(NAN,-2.0));
}Возможный вывод:
copysign(1.0,+2.0) = +1.0 copysign(1.0,-2.0) = -1.0 copysign(INFINITY,-2.0) = -inf copysign(NAN,-2.0) = -nan
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.11.1 Функции copysign (стр: 255)
- 7.25 Универсальные математические функции <tgmath.h> (стр: 373-375)
- F.10.8.1 Функции copysign (стр: 529)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.11.1 Функции copysign (стр: 236)
- 7.22 Универсальные математические функции <tgmath.h> (стр: 335-337)
- F.9.8.1 Функции copysign (стр: 465)
См. также
|
(C99)(C99) | вычисляет абсолютное значение значения с плавающей точкой (\(\small{|x|}\)|x|) (функция) |
|
(C99) | проверяет, является ли заданное число отрицательным (функция-макрос) |
Документация C++ для copysign |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/copysign