名前空間
変種
操作

std::copysign, std::copysignf, std::copysignl

From cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数関数
(C++11)
(C++11)

(C++11)
(C++11)
べき乗関数
(C++11)
(C++11)
三角関数と
双曲線関数
(C++11)
(C++11)
(C++11)

誤差関数とガンマ関数
(C++11)
(C++11)
(C++11)
(C++11)
最近接整数への浮動小数点数操作
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮動小数点数の操作関数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
copysign
(C++11)
分類と比較
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
マクロ定数
分類
(C++11)(C++11)(C++11)(C++11)(C++11)


 
ヘッダー <cmath> で定義
(1)
float         copysign ( float mag, float sgn );

double        copysign ( double mag, double sgn );

long double copysign ( long double mag, long double sgn );
(C++23まで)
constexpr /*浮動小数点数型*/

            copysign ( /*浮動小数点型*/ mag,

                       /*浮動小数点型*/ sgn );
(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> で定義
template< class V0, class V1 >

constexpr /*math-common-simd-t*/<V0, V1>

            copysign ( const V0& v_mag, const V1& v_sgn );
(S) (C++26以降)
ヘッダー <cmath> で定義
template< class Integer >
double        copysign ( Integer mag, Integer sgn );
(A) (C++23 以降 constexpr)
1-3) magの絶対値とsgnの符号を組み合わせて浮動小数点値を構成する。ライブラリは、パラメータの型としてすべてのcv修飾されていない浮動小数点型に対するstd::copysignのオーバーロードを提供します。(C++23以降)
S) SIMDオーバーロードは、v_magv_sgnに対して要素ごとのstd::copysignを実行する。
(定義についてはmath-common-simd-tを参照のこと)
(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) をサポートしている場合、

[編集] Notes

std::copysignは、NaN値の符号を操作する唯一のポータブルな方法である(NaNの符号を調べるには、std::signbitも使用できる)。

追加のオーバーロードは (A) とまったく同じように提供される必要はない。それらは、最初の引数 num1 と2番目の引数 num2 に対して以下を保証するのに十分である必要がある。

  • num1またはnum2の型がlong doubleの場合、std::copysign(num1, num2)std::copysign(static_cast<long double>(num1),
                  static_cast<long double>(num2))
    と同じ効果を持つ。
  • それ以外の場合、num1および/またはnum2の型がdoubleまたは整数型の場合、std::copysign(num1, num2)std::copysign(static_cast<double>(num1),
                  static_cast<double>(num2))
    と同じ効果を持つ。
  • それ以外の場合、num1またはnum2の型がfloatの場合、std::copysign(num1, num2)std::copysign(static_cast<float>(num1),
                  static_cast<float>(num2))
    と同じ効果を持つ。
(C++23まで)

num1num2が算術型の場合、std::copysign(num1, num2)std::copysign(static_cast</*common-floating-point-type*/>(num1),
              static_cast</*common-floating-point-type*/>(num2))
と同じ効果を持つ。ここで、/*common-floating-point-type*/は、num1num2の型の間で、最も高い浮動小数点変換ランクと最も高い浮動小数点変換サブランクを持つ浮動小数点型である。整数型の引数は、doubleと同じ浮動小数点変換ランクを持つとみなされる。

そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。

(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

浮動小数点数値の絶対値 (|x|)
(関数) [編集]
(C++11)
与えられた数値が負数かチェックする
(関数) [編集]
C documentation for copysign
English 日本語 中文(简体) 中文(繁體)