std::fegetround, std::fesetround
来自cppreference.com
| 在标头 <cfenv> 定义
|
||
| |
(1) | (C++11 起) |
| |
(2) | (C++11 起) |
管理浮点舍入方向。
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) |
使用当前舍入模式的最接近整数 若结果有别则有异常 (函数) |
fegetround, fesetround 的 C 文档
| |