std::copysign, std::copysignf, std::copysignl
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float copysign ( float mag, float sgn ); double copysign ( double mag, double sgn ); |
(C++23まで) | |
| constexpr /*浮動小数点数型*/ copysign ( /*浮動小数点型*/ 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のオーバーロードを提供します。(C++23以降)|
S) SIMDオーバーロードは、v_magとv_sgnに対して要素ごとの
std::copysignを実行する。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] Parameters
| mag, sgn | - | 浮動小数点または整数値 |
[編集] Return value
エラーが発生しない場合、magの絶対値とsgnの符号を持つ浮動小数点値が返される。
magがNaNの場合、sgnの符号を持つNaNが返される。
sgnが-0の場合、結果が負になるのは、実装が算術演算で符号付きゼロを一貫してサポートしている場合のみである。
[編集] Error handling
この関数は、math_errhandlingで指定されているエラーの対象とはならない。
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- 返される値は正確であり(FE_INEXACTは決して発生しない)、現在の丸めモードに依存しない。
[編集] Notes
std::copysignは、NaN値の符号を操作する唯一のポータブルな方法である(NaNの符号を調べるには、std::signbitも使用できる)。
追加のオーバーロードは (A) とまったく同じように提供される必要はない。それらは、最初の引数 num1 と2番目の引数 num2 に対して以下を保証するのに十分である必要がある。
|
(C++23まで) |
|
num1とnum2が算術型の場合、std::copysign(num1, num2)はstd::copysign(static_cast</*common-floating-point-type*/>(num1), そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。 |
(C++23から) |
[編集] Example
#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
[編集] See also
| (C++11)(C++11) |
浮動小数点数値の絶対値 (|x|) (関数) |
| (C++11) |
与えられた数値が負数かチェックする (関数) |
| C documentation for copysign
| |