C++ Reference: Standard C++ Library reference: C Library: cmath: llrint
C++官网参考链接:https://cplusplus.com/reference/cmath/llrint/
函数
<cmath> <ctgmath>
llrint
C99
long long int llrint(double x);
long long int llrintf(float x);
long long int llrintl(long double x);
C++11
long long int llrint(double x);
long long int llrint(float x);
long long int llrint(long double x);
long long int llrint (T x); // additional overloads for integral types
舍入并转换为long long整型
使用fegetround指定的舍入方向将x舍入为整数值,并将其作为long long int类型的值返回。
参见lrint获得返回long int的等效函数。
C99
头文件<tgmath.h>提供了该函数的类型泛型宏版本。
C++11
在此头文件(<cmath>)中为整型(integral types)提供了额外的重载:这些重载在计算之前有效地将x转换为double类型(定义为T为任何整型(integral types))。
参数
x
将要舍入的x。
返回值x的值舍入到附近的整数,并转换为long long int的值。
如果舍入的值在返回类型的范围之外,则返回的值是未指定的,并且可能发生域错误或溢出范围
错误(或者没有,取决于实现)。
如果发生域错误:
—math_errhandling设置了MATH_ERRNO:全局变量errno设置为EDOM。
—math_errhandling设置了MATH_ERREXCEPT:将引发FE_INVALID。
如果发生溢出范围错误:
—math_errhandling设置了MATH_ERRNO:全局变量errno设置为ERANGE。
—math_errhandling设置了MATH_ERREXCEPT:引发FE_OVERFLOW。
用例
/* llrint example */
#include <stdio.h> /* printf */
#include <fenv.h> /* fegetround, FE_* */
#include <math.h> /* llrint */
int main ()
{
printf ("rounding using ");
switch (fegetround()) {
case FE_DOWNWARD: printf ("downward"); break;
case FE_TONEAREST: printf ("to-nearest"); break;
case FE_TOWARDZERO: printf ("toward-zero"); break;
case FE_UPWARD: printf ("upward"); break;
default: printf ("unknown");
}
printf (" rounding:\n");
printf ( "llrint (2.3) = %lld\n", llrint(2.3) );
printf ( "llrint (3.8) = %lld\n", llrint(3.8) );
printf ( "llrint (-2.3) = %lld\n", llrint(-2.3) );
printf ( "llrint (-3.8) = %lld\n", llrint(-3.8) );
return 0;
}
可能的输出:
另请参考
nearbyint Round to nearby integral value (function) (舍入到附近整型值(函数))
rint Round to integral value (function) (舍入到整型值)
lrint Round and cast to long integer (function) (舍入并转换为long整型(函数))
round Round to nearest (function) (舍入到最近(函数))
floor Round down value (function) (向下舍入取值(函数))
ceil Round up value (function) (向上舍入取值(函数))
trunc Truncate value (function) (截断取值(函数))