先頭へ戻る

rintf | Programming Place Plus C言語編 標準ライブラリのリファレンス

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(名前順)

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(ヘッダ別)

先頭へ戻る

rintf関数

概要

小数点以下を、現在の丸め方向に従って丸める

ヘッダ

math.h

形式

float rintf(float x);

引数

x

対象の浮動小数点数。

戻り値

引数x の小数点以下を丸めた整数値。

詳細

小数点以下を、現在の丸め方向に従って丸めて、その結果の整数値を返す。なお、丸めた結果が、実引数に与えた値と一致しないとき、実装によっては、浮動小数点例外 FE_INEXACT を発生させるという点だけが、nearbyintf関数と異なる。
現在の丸め方向は、fegetround関数で取得できる。設定の変更は、fesetround関数で行う。

注意

使用例

#include <fenv.h>
#include <math.h>
#include <stdio.h>

#if defined(_MSC_VER)
#pragma fenv_access (on)
#else
#pragma STDC FENV_ACCESS ON
#endif

void call_rint(float x)
{
    feclearexcept( FE_ALL_EXCEPT );
    
    float result = rintf( x );
    printf( "%f%s\n", 
        result,
        fetestexcept(FE_INEXACT) ? " : FE_INEXACT" : ""
    );
}

void rint_test(int round)
{
    if( fesetround(round) == 0 ){
        call_rint( 3.1f );
        call_rint( 3.9f );
        call_rint( -3.1f );
        call_rint( -3.9f );
        call_rint( 3.0f );
    }
    else{
        puts( "not supported." );
    }
}

int main(void)
{
    puts( "[ FE_TONEAREST ]" );
    rint_test(FE_TONEAREST);

    puts( "[ FE_UPWARD ]" );
    rint_test(FE_UPWARD);

    puts( "[ FE_DOWNWARD ]" );
    rint_test(FE_DOWNWARD);

    puts( "[ FE_TOWARDZERO ]" );
    rint_test(FE_TOWARDZERO);

    return 0;
}

実行結果:

[ FE_TONEAREST ]
3.000000 : FE_INEXACT
4.000000 : FE_INEXACT
-3.000000 : FE_INEXACT
-4.000000 : FE_INEXACT
3.000000
[ FE_UPWARD ]
4.000000 : FE_INEXACT
4.000000 : FE_INEXACT
-3.000000 : FE_INEXACT
-3.000000 : FE_INEXACT
3.000000
[ FE_DOWNWARD ]
3.000000 : FE_INEXACT
3.000000 : FE_INEXACT
-4.000000 : FE_INEXACT
-4.000000 : FE_INEXACT
3.000000
[ FE_TOWARDZERO ]
3.000000 : FE_INEXACT
3.000000 : FE_INEXACT
-3.000000 : FE_INEXACT
-3.000000 : FE_INEXACT
3.000000

関連

double型バージョンの rint関数と、long double型バージョンの rintl関数がある。また、結果を long int型で返す lrintf関数、long long int型で返す llrintf関数がある。
丸めの方法を、fesetround関数で変更できる。
nearbyintf関数は同様のことを行うが、浮動小数点例外を発生させない。

解説章

第48章


参考リンク


------------------------------------------------------------------------

更新履歴

'2018/5/26 新規作成。


------------------------------------------------------------------------

標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー