Namespaces
Variants

nearbyint, nearbyintf, nearbyintl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
nearbyint
(C99)
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
ヘッダーで定義 <math.h>
float nearbyintf ( float arg ) ;
(1) (C99以降)
double nearbyint ( double arg ) ;
(2) (C99以降)
long double nearbyintl ( long double arg ) ;
(3) (C99以降)
ヘッダーで定義 <tgmath.h>
#define nearbyint( arg )
(4) (C99以降)
1-3) 浮動小数点引数 arg を、 現在の丸めモード を使用して浮動小数点形式の整数値に丸める。
4) 型ジェネリックマクロ: arg の型が long double の場合、 nearbyintl が呼び出される。それ以外の場合、 arg が整数型または double 型の場合、 nearbyint が呼び出される。それ以外の場合、それぞれ nearbyintf が呼び出される。

目次

パラメータ

arg - 浮動小数点値

戻り値

arg に最も近い整数値を、 現在の丸めモード に従って返します。

エラーハンドリング

この関数は、 math_errhandling で指定されているいかなるエラーにも影響されません。

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

  • FE_INEXACT は決して発生しません。
  • arg が ±∞ の場合、変更されずに返されます。
  • arg が ±0 の場合、変更されずに返されます。
  • arg が NaN の場合、NaN が返されます。

注記

nearbyint rint の唯一の違いは、 nearbyint が決して FE_INEXACT を発生させないことです。

標準的な浮動小数点形式において、表現可能な最大の浮動小数点値はすべて正確な整数であるため、 nearbyint 単体では決してオーバーフローを起こしません。しかし、結果を整数型( intmax_t を含む)の変数に格納する場合、その結果は整数型の範囲をオーバーフローする可能性があります。

現在の丸めモードが FE_TONEAREST の場合、この関数は中間の場合に偶数へ丸めます( rint と同様ですが、 round とは異なります)。

#include <fenv.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
// #pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf("rounding to nearest:\nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
    fesetround(FE_DOWNWARD);
    printf("rounding down: \nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
    printf("nearbyint(-0.0) = %+.1f\n", nearbyint(-0.0));
    printf("nearbyint(-Inf) = %+.1f\n", nearbyint(-INFINITY));
}

出力:

rounding to nearest:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +4.0
nearbyint(-2.3) = -2.0  nearbyint(-2.5) = -2.0  nearbyint(-3.5) = -4.0
rounding down:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +3.0
nearbyint(-2.3) = -3.0  nearbyint(-2.5) = -3.0  nearbyint(-3.5) = -4.0
nearbyint(-0.0) = -0.0
nearbyint(-Inf) = -inf

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.12.9.3 nearbyint関数群 (p: TBD)
  • 7.25 総称数学 <tgmath.h> (p: TBD)
  • F.10.6.3 nearbyint関数群 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.12.9.3 nearbyint関数群 (p: TBD)
  • 7.25 総称型数学 <tgmath.h> (p: TBD)
  • F.10.6.3 nearbyint関数群 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.12.9.3 nearbyint関数群 (p: 251-252)
  • 7.25 総称型数学 <tgmath.h> (p: 373-375)
  • F.10.6.3 nearbyint関数群 (p: 526)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.12.9.3 nearbyint関数群 (p: 232)
  • 7.22 総称型数学 <tgmath.h> (p: 335-337)
  • F.9.6.3 nearbyint関数群 (p: 463)

関連項目

(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
現在の丸めモードを使用して整数に丸め、
結果が異なる場合は例外を発生させる
(関数)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
最も近い整数に丸め、中間の場合はゼロから離れる方向に丸める
(関数)
丸め方向を取得または設定する
(関数)
C++ documentation for nearbyint