Spec-Zone.ru › C

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 <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)

См. также

fabsfabsffabsl
(C99)(C99)
вычисляет абсолютное значение числа с плавающей точкой (\(\small{|x|}\)|x|)
(функция)
signbit
(C99)
проверяет, является ли заданное число отрицательным
(макрос функции)
Документация по C++ для copysign

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/copysign

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API