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

См. также

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/w/c/numeric/math/copysign

Spec-Zone.ru

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