std:: copysign, std:: copysignf, std:: copysignl
|
定义于头文件
<cmath>
|
||
| (1) | ||
|
float
copysign
(
float
mag,
float
sgn
)
;
double
copysign
(
double
mag,
double
sgn
)
;
|
(C++23 前) | |
|
constexpr
/*floating-point-type*/
copysign
(
/*floating-point-type*/
mag,
|
(C++23 起) | |
|
float
copysignf
(
float
mag,
float
sgn
)
;
|
(2) |
(C++11 起)
(C++23 起为 constexpr) |
|
long
double
copysignl
(
long
double
mag,
long
double
sgn
)
;
|
(3) |
(C++11 起)
(C++23 起为 constexpr) |
|
SIMD 重载
(C++26 起)
|
||
|
定义于头文件
<simd>
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (C++26 起) |
|
额外重载
(C++11 起)
|
||
|
定义于头文件
<cmath>
|
||
|
template
<
class
Integer
>
double copysign ( Integer mag, Integer sgn ) ; |
(A) | (C++23 起为 constexpr) |
std::copysign
的重载,作为参数类型。
(since C++23)
|
S)
SIMD 重载对
v_mag
和
v_sgn
执行逐元素的
std::copysign
操作。
|
(since C++26) |
|
A)
为所有整数类型提供了额外的重载,这些类型被视为
double
。
|
(since C++11) |
目录 |
参数
| mag, sgn | - | 浮点数或整数值 |
返回值
如果未发生错误,则返回具有 mag 量值和 sgn 符号的浮点数值。
如果 mag 是 NaN,则返回带有 sgn 符号的 NaN。
如果 sgn 为 -0,仅当实现能在算术运算中始终支持有符号零时,结果才为负值。
错误处理
此函数不受 math_errhandling 中指定的任何错误影响。
如果实现支持 IEEE 浮点算术 (IEC 60559),
- 返回值是精确的( FE_INEXACT 绝不会被引发)且与当前 舍入模式 无关。
注释
std::copysign
是操作 NaN 值符号的唯一可移植方法(要检查 NaN 的符号,也可使用
std::signbit
)。
额外的重载并不需要完全按照 (A) 的形式提供。它们只需确保对于第一个参数 num1 和第二个参数 num2 满足:
|
(C++23 前) |
|
若
num1
和
num2
具有算术类型,则
std
::
copysign
(
num1, num2
)
的效果等同于
std
::
copysign
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
若不存在具有最高等级和子等级的此类浮点类型,则 重载决议 不会从提供的重载中得到可用候选。 |
(C++23 起) |
示例
#include <cmath> #include <iostream> int main() { std::cout << std::showpos << "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)
|
检查给定数字是否为负数
(函数) |
|
C 文档
for
copysign
|
|