RINT(3)

名前
nearbyint, nearbyintf, nearbyintl, rint, rintf, rintl - 最も近い整数に丸める

書式
#include <math.h>

double nearbyint(double x);
float nearbyintf(float x);
long double nearbyintl(long double x);

double rint(double x);
float rintf(float x);
long double rintl(long double x);

-lm でリンクする。

    glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

nearbyint(), nearbyintf(), nearbyintl():
    _POSIX_C_SOURCE >= 200112L || _ISOC99_SOURCE
rint():
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || _XOPEN_SOURCE >= 500
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
rintf(), rintl():
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

説明
The nearbyint(), nearbyintf(), and nearbyintl() functions round their argument to an integer value in floating-point format, using the current rounding direction (see fesetround(3)) and without raising the inexact exception. When the current rounding direction is to nearest, these functions round halfway cases to the even integer in accordance with IEEE-754.

関数 rint(), rintf(), and rintl() も同じような動作をするが、 結果が引数と異なる場合に inexact 例外 (FE_INEXACT) を出す (この例外は fetestexcept(3) 経由で確認可能)。

返り値
これらの関数は丸めた整数値を返す。

x が整数、+0、-0、NaN、無限のいずれかの場合、 x そのものが返される。

エラー
エラーは発生しない。 POSIX.1-2001 にはオーバーフローでの範囲エラー (range error) の 記載がある。「注意」の節を参照のこと。

属性
この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース | 属性 | 値
nearbyint(), nearbyintf(), nearbyintl(), rint(), rintf(), rintl() | Thread safety | MT-Safe

準拠
C99, POSIX.1-2001, POSIX.1-2008.

注意
SUSv2 と POSIX.1-2001 にはオーバーフローに関する記述があり、 オーバーフローの場合には、 errno を ERANGE に設定するか、 FE_OVERFLOW 例外を発生することとされている。 実際のところ、どの現行のマシンでも結果がオーバーフローを起こすことはないので、 このエラー処理は意味がない。 (より正確に言うと、オーバーフローは指数部の最大値が 仮数部を表すビットの数より小さい場合にしか起こらない。 IEEE-754 規格の 32 ビットと 64 ビットの浮動小数では、 指数部の最大値はそれぞれ 128 と 1024 であり、 仮数部のビット数はそれぞれ 24 と 53 である。)

丸めた値を整数型に格納した場合には、おそらくこの関数ではなく lrint(3) に載っている関数のどれかを使いたいのだろう。

関連項目
ceil(3), floor(3), lrint(3), round(3), trunc(3)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。