std::nearbyint,std::nearbyintf,std::nearbyintl
来自 cppreference.com
在头文件 <cmath> 中定义 |
||
(1) | ||
float nearbyint ( float num ); double nearbyint ( double num ); |
(直到 C++23) | |
/* 浮点类型 */ nearbyint ( /* 浮点类型 */ num ); |
(从 C++23 开始) | |
float nearbyintf( float num ); |
(2) | (从 C++11 开始) |
long double nearbyintl( long double num ); |
(3) | (从 C++11 开始) |
附加重载 (从 C++11 开始) |
||
在头文件 <cmath> 中定义 |
||
template< class Integer > double nearbyint ( Integer num ); |
(A) | |
A) 为所有整数类型提供了附加重载,这些类型被视为 double。
|
(从 C++11 开始) |
内容 |
[编辑] 参数
num | - | 浮点或整数值 |
[编辑] 返回值
根据当前舍入模式,返回最接近num的整数值。
[编辑] 错误处理
此函数不受math_errhandling中指定的任何错误影响。
如果实现支持 IEEE 浮点运算 (IEC 60559),
- FE_INEXACT 永远不会被触发。
- 如果num 为 ±∞,则返回它,保持不变。
- 如果num 为 ±0,则返回它,保持不变。
- 如果num 为 NaN,则返回 NaN。
[编辑] 备注
std::nearbyint
和std::rint 之间的唯一区别是 std::nearbyint
永远不会触发FE_INEXACT。
所有标准浮点格式中,最大的可表示浮点值是精确整数,因此 std::nearbyint
本身永远不会溢出;但是,当存储在整型变量中时,结果可能会溢出任何整型(包括std::intmax_t)。
如果当前舍入模式为FE_TONEAREST,则此函数在半途情况下舍入为偶数(类似于std::rint,但与std::round不同)。
附加重载不需要完全按 (A) 提供。它们只需要足够,以确保对于它们的整数类型参数num,std::nearbyint(num) 与std::nearbyint(static_cast<double>(num)) 具有相同的效果。
[编辑] 示例
运行此代码
#include <cfenv> #include <cmath> #include <iostream> #pragma STDC FENV_ACCESS ON int main() { std::fesetround(FE_TONEAREST); std::cout << "rounding to nearest: \n" << "nearbyint(+2.3) = " << std::nearbyint(2.3) << " nearbyint(+2.5) = " << std::nearbyint(2.5) << " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n' << "nearbyint(-2.3) = " << std::nearbyint(-2.3) << " nearbyint(-2.5) = " << std::nearbyint(-2.5) << " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n'; std::fesetround(FE_DOWNWARD); std::cout << "rounding down:\n" << "nearbyint(+2.3) = " << std::nearbyint(2.3) << " nearbyint(+2.5) = " << std::nearbyint(2.5) << " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n' << "nearbyint(-2.3) = " << std::nearbyint(-2.3) << " nearbyint(-2.5) = " << std::nearbyint(-2.5) << " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n'; std::cout << "nearbyint(-0.0) = " << std::nearbyint(-0.0) << '\n' << "nearbyint(-Inf) = " << std::nearbyint(-INFINITY) << '\n'; }
输出
rounding to nearest: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 4 nearbyint(-2.3) = -2 nearbyint(-2.5) = -2 nearbyint(-3.5) = -4 rounding down: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 3 nearbyint(-2.3) = -3 nearbyint(-2.5) = -3 nearbyint(-3.5) = -4 nearbyint(-0.0) = -0 nearbyint(-Inf) = -inf
[编辑] 另请参阅
(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++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
最接近的整数,在半途情况下舍入远离零 (函数) |
(C++11)(C++11) |
获取或设置舍入方向 (函数) |
C 文档 for nearbyint
|