round, roundf, roundl, lround, lroundf, lroundl, llround, llroundf, llroundl
提供: cppreference.com
一般的な数学関数
関数
基本操作
指数関数
冪関数
三角関数と双曲線関数
誤差関数とガンマ関数
最も近い整数
浮動小数点操作関数
分類
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
型
(C99)(C99)
(C99)(C99)
マクロ定数
(C99)(C99)
(C99)(C99)(C99)
(C99)(C99)(C99)
(C99)
(C99)
(C99)(C99)
(C99)(C99)(C99)(C99)(C99)
ヘッダ
<math.h>
で定義
float roundf( float arg );
(1)
(C99以上)
double round( double arg );
(2)
(C99以上)
long double roundl( long double arg );
(3)
(C99以上)
ヘッダ
<tgmath.h>
で定義
#define round( arg )
(4)
(C99以上)
ヘッダ
<math.h>
で定義
long lroundf( float arg );
(5)
(C99以上)
long lround( double arg );
(6)
(C99以上)
long lroundl( long double arg );
(7)
(C99以上)
ヘッダ
<tgmath.h>
で定義
#define lround( arg )
(8)
(C99以上)
ヘッダ
<math.h>
で定義
long long llroundf( float arg );
(9)
(C99以上)
long long llround( double arg );
(10)
(C99以上)
long long llroundl( long double arg );
(11)
(C99以上)
ヘッダ
<tgmath.h>
で定義
#define llround( arg )
(12)
(C99以上)
1-3) (浮動小数点形式の)
arg
に最も近い整数値を計算します。 中間の場合はゼロから離れる方向に丸められます。 現在の丸めモードは影響しません。5-7, 9-11) (整数形式の)
arg
に最も近い整数値を計算します。 中間の場合はゼロから離れる方向に丸められます。 現在の丸めモードは影響しません。4,8,12) 型総称マクロ。
arg
が long double 型の場合はぞれぞれ roundl
, lroundl
, llroundl
が呼ばれます。 そうでなく、 arg
が整数型または double 型の場合は round
, lround
, llround
が呼ばれます。 そうでなければ roundf
, lroundf
, llroundf
が呼ばれます。[編集] 引数
arg
-
浮動小数点値
[編集] 戻り値
エラーが発生しなければ、 arg
に最も近い (中間の場合はゼロから離れる方向に丸めた) 整数値が返されます。
定義域エラーが発生した場合、処理系定義の値が返されます。
[編集] エラー処理
math_errhandling で規定されている通りにエラーが報告されます。
lround
または llround
の結果が戻り値の型で表現可能な範囲外の場合、定義域エラーまたは地域エラーが発生するかもしれません。
処理系が IEEE 浮動小数点算術 (IEC 60559) をサポートしている場合、
-
round
,roundf
,roundl
関数については
- 現在の丸めモードは効果を持ちません。
-
arg
が ±∞ であれば、それが変更されずに返されます。 -
arg
が ±0 であれば、それが変更されずに返されます。 -
arg
が NaN であれば、 NaN が返されます。
-
lround
およびllround
ファミリーの関数については
- FE_INEXACT が発生することはありません。
- 現在の丸めモードは効果を持ちません。
-
arg
が ±∞ であれば、 FE_INVALID が発生し、処理系定義の値が返されます。 - 丸めの結果が戻り値の型の範囲外の場合、 FE_INVALID が発生し、処理系定義の値が返されます。
-
arg
が NaN であれば、 FE_INVALID が発生し、処理系定義の値が返されます。
[編集] ノート
非整数の有限な値を丸めるとき、 round
によって FE_INEXACT が発生するかもしれません (が要求されているわけではありません)。
すべての標準の浮動小数点フォーマットにおいて、最も大きな表現可能な浮動小数点値は正確な整数であるため、 round
それ自体はオーバーフローすることはありません。 しかし任意の整数型 (intmax_t も含みます) は、整数変数に格納するとき、結果がオーバーフローするかもしれません。
POSIX は、 lround
または llround
が FE_INEXACT を発生するすべてのケースは定義域エラーであると規定しています。
round
の double 版は以下のように実装されているかのように動作します。
[編集] 例
Run this code
#include <stdio.h> #include <math.h> #include <fenv.h> #include <limits.h> #pragma STDC FENV_ACCESS ON int main(void) { // round printf ("round(+2.3) = %+.1f ", round(2.3)); printf ("round(+2.5) = %+.1f ", round(2.5)); printf ("round(+2.7) = %+.1f\n", round(2.7)); printf ("round(-2.3) = %+.1f ", round(-2.3)); printf ("round(-2.5) = %+.1f ", round(-2.5)); printf ("round(-2.7) = %+.1f\n", round(-2.7)); printf ("round(-0.0) = %+.1f\n", round(-0.0)); printf ("round(-Inf) = %+f\n", round(-INFINITY)); // lround printf ("lround(+2.3) = %ld ", lround(2.3)); printf ("lround(+2.5) = %ld ", lround(2.5)); printf ("lround(+2.7) = %ld\n", lround(2.7)); printf ("lround(-2.3) = %ld ", lround(-2.3)); printf ("lround(-2.5) = %ld ", lround(-2.5)); printf ("lround(-2.7) = %ld\n", lround(-2.7)); printf ("lround(-0.0) = %ld\n", lround(-0.0)); printf ("lround(-Inf) = %ld\n", lround(-INFINITY)); // FE_INVALID が発生します // エラー処理 feclearexcept (FE_ALL_EXCEPT ); printf ("lround(LONG_MAX+1.5) = %ld\n", lround(LONG_MAX +1.5)); if(fetestexcept (FE_INVALID )) puts (" FE_INVALID was raised"); }
出力例:
round(+2.3) = +2.0 round(+2.5) = +3.0 round(+2.7) = +3.0 round(-2.3) = -2.0 round(-2.5) = -3.0 round(-2.7) = -3.0 round(-0.0) = -0.0 round(-Inf) = -inf lround(+2.3) = 2 lround(+2.5) = 3 lround(+2.7) = 3 lround(-2.3) = -2 lround(-2.5) = -3 lround(-2.7) = -3 lround(-0.0) = 0 lround(-Inf) = -9223372036854775808 lround(LONG_MAX+1.5) = -9223372036854775808 FE_INVALID was raised
[編集] 参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.12.9.6 The round functions (p: 253)
- 7.12.9.7 The lround and llround functions (p: 253)
- 7.25 Type-generic math <tgmath.h> (p: 373-375)
- F.10.6.6 The round functions (p: 527)
- F.10.6.7 The lround and llround functions (p: 528)
- C99 standard (ISO/IEC 9899:1999):
- 7.12.9.6 The round functions (p: 233)
- 7.12.9.7 The lround and llround functions (p: 234)
- 7.22 Type-generic math <tgmath.h> (p: 335-337)
- F.9.6.6 The round functions (p: 464)
- F.9.6.7 The lround and llround functions (p: 464)
[編集] 関連項目
round の C++リファレンス