常用数学函数
从一个给定值的绝对值和另一个给定值的符号产生值
std::copysign,
std::copysignf,
std::copysignl
定义于头文件 |
||
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 起) |
定义于头文件 |
||
#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 ),则
- 返回值是准确的(决不引发 FE_INEXACT ),且与当前舍入模式独立。
注意
copysign
是操纵 NaN 值符号的唯一可移植方式(为检验 NaN 的符号,亦可用 signbit )。
调用示例
#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <cinttypes>
#include <cmath>
#include <math.h>
#include <tgmath.h>
int main()
{
//1-3) 以 x 的绝对值和 y 的符号合成浮点值。
const float fNumber = std::acos(-1);
std::cout << "typeid(float).name(): " << typeid(float).name() << std::endl;
for