copysign, copysignf, copysignl

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
指数函数
(C99)
(C99)
(C99)
(C99)
幂函数
(C99)
(C99)
三角及双曲函数
(C99)
(C99)
(C99)
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
临近整数的浮点运算
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
浮点数操作函数
(C99)(C99)
(C99)
(C99)
copysign
(C99)
分类
(C99)
(C99)
(C99)
类型
(C99)(C99)
宏常量
 
定义于头文件 <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|
(函数)
检查给定数是不是负数
(函数)