命名空间
变体
操作

std::fegetround, std::fesetround

来自 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,该参数应为 浮点舍入宏 之一。
2) 返回与当前舍入方向相对应的 浮点舍入宏 的值。

内容

[编辑] 参数

round - 舍入方向,为 浮点舍入宏 之一

[编辑] 返回值

1) 0 如果成功,否则为非零值。

2) 描述当前舍入方向的 浮点舍入宏,如果无法确定方向,则为负值。

[编辑] 注释

可以使用 FLT_ROUNDS 查询当前舍入模式,该模式反映了最近一次 fesetround 的影响。

有关舍入的影响,请参阅 浮点舍入宏

[编辑] 示例

#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