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) |
x и знаком y.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 <math.h>
#include <stdio.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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.11.1 Функции copysign (стр.: TBD)
- 7.25 Обобщённая для типов математика <tgmath.h> (стр.: TBD)
- F.10.8.1 Функции copysign (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.11.1 Функции copysign (стр.: TBD)
- 7.25 Обобщённая для типов математика <tgmath.h> (стр.: TBD)
- F.10.8.1 Функции copysign (стр.: TBD)
- Стандарт 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/c/numeric/math/copysign