名前空間
変種
操作

rint、rintf、rintl、lrint、lrintf、lrintl、llrint、llrintf、llrintl

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小演算
(C99)
(C99)
指数関数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
べき乗関数
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
三角関数と双曲線関数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
最も近い整数浮動小数点数
(C99)(C99)(C99)
(C99)

rintlrintllrint
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮動小数点操作
(C99)(C99)
(C99)(C23)
(C99)
縮小演算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子および量子指数
Decimal再エンコーディング関数
総順序およびペイロード関数
分類
(C99)
(C99)
(C99)
(C23)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
マクロ定数
特殊な浮動小数点値
(C99)(C23)
引数と戻り値
エラーハンドリング
高速演算インジケータ
 
ヘッダー <math.h> で定義
float rintf( float arg );
(1) (C99以降)
double rint( double arg );
(2) (C99以降)
long double rintl( long double arg );
(3) (C99以降)
ヘッダー <tgmath.h> で定義
#define rint( arg )
(4) (C99以降)
ヘッダー <math.h> で定義
long lrintf( float arg );
(5) (C99以降)
long lrint( double arg );
(6) (C99以降)
long lrintl( long double arg );
(7) (C99以降)
ヘッダー <tgmath.h> で定義
#define lrint( arg )
(8) (C99以降)
ヘッダー <math.h> で定義
long long llrintf( float arg );
(9) (C99以降)
long long llrint( double arg );
(10) (C99以降)
long long llrintl( long double arg );
(11) (C99以降)
ヘッダー <tgmath.h> で定義
#define llrint( arg )
(12) (C99以降)
1-3) 浮動小数点引数 arg を、現在の丸めモードを使用して、浮動小数点形式の整数値に丸めます。
5-7, 9-11) 浮動小数点引数 arg を、現在の丸めモードを使用して、整数形式の整数値に丸めます。
4,8,12) 型汎用マクロ:arg の型が long double の場合、rintllrintlllrintl が呼び出されます。そうでない場合、arg の型が整数型または double 型の場合、rintlrintllrint が呼び出されます。それ以外の場合は、それぞれ rintflrintfllrintf が呼び出されます。

目次

[編集] パラメーター

arg - floating-point value

[編集] 戻り値

エラーが発生しない場合、現在の丸めモードに従って、arg に最も近い整数値が返されます。

[編集] エラー処理

エラーは math_errhandling で指定されたとおりに報告されます。

lrint または llrint の結果が、戻り値の型で表現可能な範囲外の場合、ドメインエラーまたは範囲エラーが発生する可能性があります。

実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、

rint 関数について
  • arg が ±∞ の場合、変更されずに返されます。
  • arg が ±0 の場合、変更されずに返されます。
  • arg が NaN の場合、NaN が返されます。
lrint および llrint 関数について
  • arg が ±∞ の場合、FE_INVALID が発生し、実装定義の値が返されます。
  • 丸めの結果が戻り値の型の範囲外の場合、FE_INVALID が発生し、実装定義の値が返されます。
  • arg が NaN の場合、FE_INVALID が発生し、実装定義の値が返されます。

[編集] 注意

POSIX はlrint または llrintFE_INEXACT を発生させるすべてのケースをドメインエラーと規定しています。

math_errhandling に規定されているように、rint は、非整数有限値を丸めるときに FE_INEXACT を発生させる場合があります(ただし、IEEE 以外の浮動小数点プラットフォームでは必須ではありません)。

rintnearbyint の唯一の違いは、nearbyintFE_INEXACT を発生させないことです。

表現可能な最大の浮動小数点値は、すべての標準浮動小数点フォーマットにおいて正確な整数であるため、rint 自体はオーバーフローしません。ただし、整数変数に格納される場合、結果は(intmax_t を含む)あらゆる整数型をオーバーフローする可能性があります。

現在の丸めモードが...

[編集]

#include <fenv.h>
#include <limits.h>
#include <math.h>
#include <stdio.h>
 
int main(void)
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf("rounding to nearest (halfway cases to even):\n"
           "rint(+2.3) = %+.1f  ", rint(2.3));
    printf("rint(+2.5) = %+.1f  ", rint(2.5));
    printf("rint(+3.5) = %+.1f\n", rint(3.5));
    printf("rint(-2.3) = %+.1f  ", rint(-2.3));
    printf("rint(-2.5) = %+.1f  ", rint(-2.5));
    printf("rint(-3.5) = %+.1f\n", rint(-3.5));
 
    fesetround(FE_DOWNWARD);
    printf("rounding down: \nrint(+2.3) = %+.1f  ", rint(2.3));
    printf("rint(+2.5) = %+.1f  ", rint(2.5));
    printf("rint(+3.5) = %+.1f\n", rint(3.5));
    printf("rint(-2.3) = %+.1f  ", rint(-2.3));
    printf("rint(-2.5) = %+.1f  ", rint(-2.5));
    printf("rint(-3.5) = %+.1f\n", rint(-3.5));
    printf("rounding down with lrint: \nlrint(+2.3) = %ld  ", lrint(2.3));
    printf("lrint(+2.5) = %ld  ", lrint(2.5));
    printf("lrint(+3.5) = %ld\n", lrint(3.5));
    printf("lrint(-2.3) = %ld  ", lrint(-2.3));
    printf("lrint(-2.5) = %ld  ", lrint(-2.5));
    printf("lrint(-3.5) = %ld\n", lrint(-3.5));
 
    printf("lrint(-0.0) = %ld\n", lrint(-0.0));
    printf("lrint(-Inf) = %ld\n", lrint(-INFINITY)); // FE_INVALID raised
 
    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf("rint(1.1) = %.1f\n", rint(1.1));
    if (fetestexcept(FE_INEXACT))
        puts("    FE_INEXACT was raised");
 
    feclearexcept(FE_ALL_EXCEPT);
    printf("lrint(LONG_MIN-2048.0) = %ld\n", lrint(LONG_MIN-2048.0));
    if (fetestexcept(FE_INVALID))
        puts("    FE_INVALID was raised");
}

実行結果の例

rounding to nearest (halfway cases to even):
rint(+2.3) = +2.0  rint(+2.5) = +2.0  rint(+3.5) = +4.0
rint(-2.3) = -2.0  rint(-2.5) = -2.0  rint(-3.5) = -4.0
rounding down:
rint(+2.3) = +2.0  rint(+2.5) = +2.0  rint(+3.5) = +3.0
rint(-2.3) = -3.0  rint(-2.5) = -3.0  rint(-3.5) = -4.0
rounding down with lrint:
lrint(+2.3) = 2  lrint(+2.5) = 2  lrint(+3.5) = 3
lrint(-2.3) = -3  lrint(-2.5) = -3  lrint(-3.5) = -4
lrint(-0.0) = 0
lrint(-Inf) = -9223372036854775808
rint(1.1) = 1.0
    FE_INEXACT was raised
lrint(LONG_MIN-2048.0) = -9223372036854775808
    FE_INVALID was raised

[編集] 参照

  • C23標準 (ISO/IEC 9899:2024)
  • 7.12.9.4 The rint functions (p: TBD)
  • 7.12.9.5 The lrint and llrint functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.6.4 The rint functions (p: TBD)
  • F.10.6.5 The lrint and llrint functions (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.12.9.4 The rint functions (p: 184)
  • 7.12.9.5 The lrint and llrint functions (p: 184)
  • 7.25 型総称数学関数 <tgmath.h> (p: 272-273)
  • F.10.6.4 The rint functions (p: 384)
  • F.10.6.5 The lrint and llrint functions (p: 384)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12.9.4 The rint functions (p: 252)
  • 7.12.9.5 The lrint and llrint functions (p: 252)
  • 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
  • F.10.6.4 The rint functions (p: 527)
  • F.10.6.5 The lrint and llrint functions (p: 527)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12.9.4 The rint functions (p: 232-233)
  • 7.12.9.5 The lrint and llrint functions (p: 233)
  • 7.22 型総称数学関数 <tgmath.h> (p: 335-337)
  • F.9.6.4 The rint functions (p: 463)
  • F.9.6.5 The lrint and llrint functions (p: 463)

[編集] 関連項目

(C99)(C99)(C99)
与えられた値の絶対値より大きくない最も近い整数に丸める
(関数) [編集]
現在の丸めモードを使用して整数に丸める
(関数) [編集]
丸め方向を取得または設定する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)