C 参考手册

位置:首页 > 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 ,则返回拥有 y 的符号的 NaN 。

y 为 -0 ,则仅若实现支持与算术运算一致的有符号零,结果才为负。

错误处理

此函数不受制于任何指定于 math_errhandling 的错误。

若实现支持 IEEE 浮点算术( IEC 60559 ),则

注意

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 standard (ISO/IEC 9899:2011):
  • 7.12.11.1 The copysign functions (p: 255)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.8.1 The copysign functions (p: 529)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.11.1 The copysign functions (p: 236)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.8.1 The copysign functions (p: 465)

参阅

(C99)(C99)
计算浮点值的绝对值( |x|
(函数)
检查给定数是不是负数
(宏函数)