std::copysign, std::copysignf, std::copysignl
来自cppreference.com
定义于头文件 <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 ),则
- 返回值是准确的(决不引发 FE_INEXACT )且独立于当前舍入模式。
注意
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
参阅
(C++11)(C++11) |
浮点值的绝对值(|x|) (函数) |
(C++11) |
检查给定数是否为负 (函数) |