非常教程

C参考手册

数值 | Numerics

nearbyintl

在头文件<math.h>中定义

float nearbyintf( float arg );

(1)

(since C99)

double nearbyint( double arg );

(2)

(since C99)

long double nearbyintl( long double arg );

(3)

(since C99)

Defined in header <tgmath.h>

#define nearbyint( arg )

(4)

(since C99)

1-3)arg使用当前舍入模式将浮点参数四舍五入为浮点格式的整数值。

4)类型 - 通用宏:如果arg有类型long doublenearbyintl被调用。否则,如果arg有整数类型或类型doublenearbyint则调用。否则nearbyintf,分别称为。

参数

arg

-

浮点值

返回值

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

错误处理

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

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

  • FE_INEXACT 从未被提出
  • 如果arg是±∞,则返回,未修改
  • 如果arg为±0,则返回,未修改
  • 如果arg是NaN,则返回NaN

笔记

之间唯一的区别nearbyintrintnearbyint永远不会提高FE_INEXACT

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

如果当前的舍入模式是FE_TONEAREST,这个函数甚至在一半的情况下(例如rint,但不像round)。

#include <stdio.h>
#include <math.h>
#include <fenv.h>
 
int main(void)
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf("rounding to nearest:\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("rounding down: \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));
}

输出:

rounding to nearest:
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
rounding down: 
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

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.12.9.3附近的功能(p:251-252)
    • 7.25类型通用数学<tgmath.h>(p:373-375)
    • F.10.6.3附近的函数(p:526)
  • C99标准(ISO / IEC 9899:1999):
    • 7.12.9.3附近的函数(p:232)
    • 7.22类型通用数学<tgmath.h>(p:335-337)
    • F.9.6.3 nearbyint函数(p:463)
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。