copysign, copysignf, copysignl
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <math.h> で定義
|
||
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以上) |
| ヘッダ <tgmath.h> で定義
|
||
#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 も使用することができます)。
例
Run this code
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("copysign(1.0,+2.0) = %+.1f\n", copysign(1.0,+2.0));
printf("copysign(1.0,-2.0) = %+.1f\n", copysign(1.0,-2.0));
printf("copysign(INFINITY,-2.0) = %f\n", copysign(INFINITY,-2.0));
printf("copysign(NAN,-2.0) = %f\n", copysign(NAN,-2.0));
}
出力例:
copysign(1.0,+2.0) = +1.0
copysign(1.0,-2.0) = -1.0
copysign(INFINITY,-2.0) = -inf
copysign(NAN,-2.0) = -nan
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.12.11.1 The copysign functions (p: 255)
- 7.25 Type-generic math <tgmath.h> (p: 373-375)
- F.10.8.1 The copysign functions (p: 529)
- C99 standard (ISO/IEC 9899:1999):
- 7.12.11.1 The copysign functions (p: 236)
- 7.22 Type-generic math <tgmath.h> (p: 335-337)
- F.9.8.1 The copysign functions (p: 465)
関連項目
(C99)(C99) |
浮動小数点値の絶対値 (|x|) を計算します (関数) |
(C99) |
指定された値が負かどうか調べます (関数マクロ) |
copysign の C++リファレンス
| |