名前空間
変種
操作

std::fegetround, std::fesetround

From cppreference.com
< cpp‎ | numeric‎ | fenv
 
 
 
浮動小数点環境
関数
fegetroundfesetround
(C++11)(C++11)
(C++11)(C++11)
マクロ定数
(C++11)
 
ヘッダー<cfenv>で定義
int fesetround( int round )
(1) (C++11以降)
int fegetround()
(2) (C++11以降)

浮動小数点丸め方向を管理します。

1) 引数roundに浮動小数点丸め方向を設定しようとします。roundは、浮動小数点丸めマクロのいずれかであることが期待されます。
2) 現在の丸め方向に対応する浮動小数点丸めマクロの値を返します。

目次

[編集] パラメータ

round - 丸め方向。 浮動小数点丸めマクロのいずれか。

[編集] 戻り値

1) 成功した場合は0、それ以外の場合はゼロ以外。

2) 現在の丸め方向を示す浮動小数点丸めマクロ。方向が決定できない場合は負の値。

[編集] 注記

直近のfesetroundの効果を反映した現在の丸めモードは、 FLT_ROUNDSでも照会できます。

丸めの効果については、 浮動小数点丸めマクロを参照してください。

[編集]

#include <cfenv>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <utility>
// #pragma STDC FENV_ACCESS ON
 
int main()
{
    static constexpr std::pair<const char*, const double> samples[]
    {
        {" 12.0", 12.0},  {" 12.1", 12.1}, {"-12.1", -12.1}, {" 12.5", 12.5},
        {"-12.5", -12.5}, {" 12.9", 12.9}, {"-12.9", -12.9}, {" 13.0", 13.0}
    };
 
    std::cout <<
        "│ sample │  FE_DOWNWARD  │   FE_UPWARD   │ FE_TONEAREST  │ FE_TOWARDZERO │\n";
 
    for (const auto& [str, fp] : samples)
    {
        std::cout << "│ " << std::setw(6) << str << " │  ";
        for (const int dir : {FE_DOWNWARD, FE_UPWARD, FE_TONEAREST, FE_TOWARDZERO})
        {
            std::fesetround(dir);
            std::cout << std::setw(10) << std::fixed << std::nearbyint(fp) << "   │  ";
        }
        std::cout << '\n';
    }
}

出力

│ sample │  FE_DOWNWARD  │   FE_UPWARD   │ FE_TONEAREST  │ FE_TOWARDZERO │
│   12.0 │   12.000000   │   12.000000   │   12.000000   │   12.000000   │
│   12.1 │   12.000000   │   13.000000   │   12.000000   │   12.000000   │
│  -12.1 │  -13.000000   │  -12.000000   │  -12.000000   │  -12.000000   │
│   12.5 │   12.000000   │   13.000000   │   12.000000   │   12.000000   │
│  -12.5 │  -13.000000   │  -12.000000   │  -12.000000   │  -12.000000   │
│   12.9 │   12.000000   │   13.000000   │   13.000000   │   12.000000   │
│  -12.9 │  -13.000000   │  -12.000000   │  -13.000000   │  -12.000000   │
│   13.0 │   13.000000   │   13.000000   │   13.000000   │   13.000000   │

[編集] 関連項目

(C++11)(C++11)(C++11)
現在の丸めモードを使用して最近接整数を求める
(関数) [編集]
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
現在の丸めモードを使用して最近接整数を求める
結果が異なる場合は例外を送出する
(関数) [編集]
Cドキュメント fegetround, fesetround
English 日本語 中文(简体) 中文(繁體)