Namespaces
Variants

nearbyint, nearbyintf, nearbyintl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
nearbyint
(C99)
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
定义于头文件 <math.h>
float nearbyintf ( float arg ) ;
(1) (C99 起)
double nearbyint ( double arg ) ;
(2) (C99 起)
long double nearbyintl ( long double arg ) ;
(3) (C99 起)
定义于头文件 <tgmath.h>
#define nearbyint( arg )
(4) (C99 起)
1-3) 将浮点参数 arg 舍入为浮点格式的整数值,使用 当前舍入模式
4) 类型泛型宏:若 arg 具有 long double 类型,则调用 nearbyintl 。否则,若 arg 具有整数类型或 double 类型,则调用 nearbyint 。否则,分别调用 nearbyintf

目录

参数

arg - 浮点数值

返回值

返回根据 当前舍入模式 最接近 arg 的整数值。

错误处理

此函数不受 math_errhandling 中指定的任何错误影响。

如果实现支持 IEEE 浮点算术 (IEC 60559),

  • FE_INEXACT 永不引发。
  • arg 为 ±∞,则直接返回该值。
  • arg 为 ±0,则直接返回该值。
  • arg 为 NaN,则返回 NaN。

注释

nearbyint rint 的唯一区别在于 nearbyint 从不引发 FE_INEXACT

在所有标准浮点格式中,最大可表示的浮点值都是精确整数,因此 nearbyint 自身永远不会溢出;然而当结果存入整型变量时,可能会溢出任何整数类型(包括 intmax_t )。

如果当前舍入模式为 FE_TONEAREST ,本函数在处理中间值时向偶数舍入(类似 rint ,但不同于 round )。

示例

#include <fenv.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
// #pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf("四舍五入到最近值:\nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
    fesetround(FE_DOWNWARD);
    printf("向下舍入:\nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
    printf("nearbyint(-0.0) = %+.1f\n", nearbyint(-0.0));
    printf("nearbyint(-Inf) = %+.1f\n", nearbyint(-INFINITY));
}

输出:

四舍五入到最近值:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +4.0
nearbyint(-2.3) = -2.0  nearbyint(-2.5) = -2.0  nearbyint(-3.5) = -4.0
向下舍入:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +3.0
nearbyint(-2.3) = -3.0  nearbyint(-2.5) = -3.0  nearbyint(-3.5) = -4.0
nearbyint(-0.0) = -0.0
nearbyint(-Inf) = -inf

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.12.9.3 nearbyint 函数集 (p: TBD)
  • 7.25 泛型数学 <tgmath.h> (p: TBD)
  • F.10.6.3 nearbyint 函数集 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 7.12.9.3 nearbyint 函数集 (p: TBD)
  • 7.25 泛型数学 <tgmath.h> (p: TBD)
  • F.10.6.3 nearbyint 函数集 (p: TBD)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.12.9.3 nearbyint 函数 (p: 251-252)
  • 7.25 类型泛型数学 <tgmath.h> (p: 373-375)
  • F.10.6.3 nearbyint 函数 (p: 526)
  • C99标准(ISO/IEC 9899:1999):
  • 7.12.9.3 nearbyint函数(第232页)
  • 7.22 泛型数学 <tgmath.h>(第335-337页)
  • F.9.6.3 nearbyint函数(第463页)

另请参阅

(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
使用当前舍入模式舍入到整数,
若结果不同则产生异常
(函数)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
舍入到最接近的整数,在中间情况下远离零舍入
(函数)
获取或设置舍入方向
(函数)
C++ 文档 for nearbyint