std::copysign, std::copysignf, std::copysignl_C++中文网

定义于头文件 <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 为 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

参阅