C++ 参考手册

位置:首页 > C++ 参考手册 >数值库 >常用数学函数 > std::copysign, std::copysignf, std::copysignl

定义于头文件 <cmath>
float       copysign ( float x, float y );
float       copysignf( float x, float y );
(1) (C++11 起)
double      copysign ( double x, double y );
(2) (C++11 起)
long double copysign ( long double x, long double y );
long double copysignl( long double x, long double y );
(3) (C++11 起)
Promoted    copysign ( Arithmetic1 x, Arithmetic2 y );
(4) (C++11 起)
1-3)x 的模和 y 的符号组成浮点值。
4) 重载集或函数模板,用于所有 (1-3) 所不覆盖的算术类型参数组合。若任何参数拥有整数类型,则将它转型到 double 。若任何参数为 long double ,则返回类型 Promoted 亦为 long double , 否则返回类型始终是 double

参数

x, y - 浮点值

返回值

若无错误发生,则返回以 x 的模与 y 的符号组成的浮点值。

x 为 NaN ,则返回带 y 符号的 NaN 。

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

错误处理

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

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

注意

std::copysign 是操作 NaN 值符号的唯一可移植方式( signbit 亦可用于检验 NaN 的符号)

示例

#include <iostream>
#include <cmath>
 
int main(void)
{
    std::cout << "copysign(1.0,+2.0) = " << std::copysign(1.0,+2.0) << '\n'
              << "copysign(1.0,-2.0) = " << std::copysign(1.0,-2.0) << '\n'
              << "copysign(inf,-2.0) = " << std::copysign(INFINITY,-2.0) << '\n'
              << "copysign(NaN,-2.0) = " << std::copysign(NAN,-2.0) << '\n';
}

输出:

copysign(1.0,+2.0) = 1
copysign(1.0,-2.0) = -1
copysign(inf,-2.0) = -inf
copysign(NaN,-2.0) = -nan

参阅

浮点值的绝对值( |x|
(函数)
(C++11)
检查给定数是否为负
(函数)