Espacios de nombres
Variantes
Acciones

std::round, std::roundf, std::roundl, std::lround, std::lroundf, std::lroundl

De cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
Funciones matemáticas comunes
Funciones
Operaciones básicas
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones exponenciales
(C++11)
(C++11)
(C++11)
(C++11)
Funciones de potencias
(C++11)
(C++11)
Funciones trigonométricas e hiperbólicas
(C++11)
(C++11)
(C++11)
Funciones de error y gamma
(C++11)
(C++11)
(C++11)
(C++11)
Operaciones de punto flotante del entero más cercano
roundlroundllround
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones de manipulación de punto flotante
(C++11)(C++11)
(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Constantes de macro
(C++11)(C++11)(C++11)(C++11)(C++11)
 
Definido en el archivo de encabezado <cmath>
float       round (float arg );
(1) (desde C++11)
(constexpr since C++23)
float       roundf(float arg );
(2) (desde C++11)
(constexpr since C++23)
double      round (double arg );
(3) (desde C++11)
(constexpr since C++23)
longdouble round (longdouble arg );
(4) (desde C++11)
(constexpr since C++23)
longdouble roundl(longdouble arg );
(5) (desde C++11)
(constexpr since C++23)
double      round ( TipoEntero arg );
(6) (desde C++11)
(constexpr since C++23)
long lround (float arg );
(7) (desde C++11)
(constexpr since C++23)
long lroundf(float arg );
(8) (desde C++11)
(constexpr since C++23)
long lround (double arg );
(9) (desde C++11)
(constexpr since C++23)
long lround (longdouble arg );
(10) (desde C++11)
(constexpr since C++23)
long lroundl(longdouble arg );
(11) (desde C++11)
(constexpr since C++23)
long lround ( TipoEntero arg );
(12) (desde C++11)
(constexpr since C++23)
longlong llround (float arg );
(13) (desde C++11)
(constexpr since C++23)
longlong llroundf(float arg );
(14) (desde C++11)
(constexpr since C++23)
longlong llround (double arg );
(15) (desde C++11)
(constexpr since C++23)
longlong llround (longdouble arg );
(16) (desde C++11)
(constexpr since C++23)
longlong llroundl(longdouble arg );
(17) (desde C++11)
(constexpr since C++23)
longlong llround ( TipoEntero arg );
(18) (desde C++11)
(constexpr since C++23)
1-5) Calcula el valor entero más cercano a arg (en formato de punto flotante), redondeando la mitad de los casos desde cero, independientemente del modo de redondeo actual.
7-11,13-17) Calcula el valor entero más cercano a arg (en formato de entero), redondeando la mitad de los casos desde cero, independientemente del modo de redondeo actual.
6,12,18) Un conjunto de sobrecargas o una plantilla de función que acepta un argumento de cualquier tipo entero. Equivalente a (3), (9), o (15), respectivamente (el argumento se convierte a double).

Contenido

[editar]Parámetros

arg - Valor de punto flotante.

[editar]Valor de retorno

Si no se producen errores, se devuelve el valor entero más cercano a arg, redondeando la mitad de los casos desde cero.

Valor de retorno
math-round away zero.svg
Argumento

Si se produce un error de dominio, se devuelve un valor definido por la implementación.

[editar]Manejo de errores

Los errores se informan como se especifica en math_errhandling.

Si el resultado de std::lround o std::llround está fuera del rango representable por el tipo de retorno, puede producirse un error de dominio o un error de rango.

Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):

Para la función std::round:
  • El modo de redondeo actual no tiene efecto.
  • Si arg es +∞, se devuelve +∞.
  • Si arg es -∞, se devuelve -∞.
  • Si arg es +0, se devuelve +0.
  • Si arg es -0, se devuelve -0.
  • Si arg es NaN, se devuelve NaN.
Para las funciones std::lround y std::llround:
  • Nunca se genera FE_INEXACT.
  • El modo de redondeo actual no tiene efecto.
  • Si arg es +∞ o -∞, se genera FE_INVALID y se devuelve un valor definido por la implementación.
  • Si el resultado del redondeo está fuera del rango del tipo de retorno, se genera FE_INVALID y se devuelve un valor definido por la implementación.
  • Si arg es NaN, se genera FE_INVALID y se devuelve un valor definido por la implementación.

[editar]Notas

Se puede generar FE_INEXACT (pero no es obligatorio) por std::round al redondear un valor finito no entero.

Los valores de punto flotante representables más grandes son enteros exactos en todos los formatos de punto flotante estándar, por lo que std::round nunca se desborda por sí solo; sin embargo, el resultado puede desbordar cualquier tipo de entero (incluido std::intmax_t), cuando se almacena en una variable entera.

POSIX especifica que todos los casos donde std::lround o std::llround generen FE_INEXACT sean errores de dominio.

La versión double de std::round se comporta como si estuviera implementada de la siguiente manera:

#include <cmath>#include <cfenv>#pragma STDC FENV_ACCESS ONdouble round(double x){std::fenv_t save_env;std::feholdexcept(&save_env);double result =std::rint(x);if(std::fetestexcept(FE_INEXACT)){autoconst save_round =std::fegetround();std::fesetround(FE_TOWARDZERO); result =std::rint(std::copysign(0.5+std::fabs(x), x));std::fesetround(save_round);}std::feupdateenv(&save_env);return result;}

[editar]Ejemplo

#include <iostream>#include <cmath>#include <cfenv>#include <climits>   // #pragma STDC FENV_ACCESS ON   int main(){// roundstd::cout<<"round(+2.3) = "<< std::round(2.3)<<" round(+2.5) = "<< std::round(2.5)<<" round(+2.7) = "<< std::round(2.7)<<'\n'<<"round(-2.3) = "<< std::round(-2.3)<<" round(-2.5) = "<< std::round(-2.5)<<" round(-2.7) = "<< std::round(-2.7)<<'\n';   std::cout<<"round(-0.0) = "<< std::round(-0.0)<<'\n'<<"round(-Inf) = "<< std::round(-INFINITY)<<'\n';   // lroundstd::cout<<"lround(+2.3) = "<< std::lround(2.3)<<" lround(+2.5) = "<< std::lround(2.5)<<" lround(+2.7) = "<< std::lround(2.7)<<'\n'<<"lround(-2.3) = "<< std::lround(-2.3)<<" lround(-2.5) = "<< std::lround(-2.5)<<" lround(-2.7) = "<< std::lround(-2.7)<<'\n';   std::cout<<"lround(-0.0) = "<< std::lround(-0.0)<<'\n'<<"lround(-Inf) = "<< std::lround(-INFINITY)<<'\n';   // manejo de erroresstd::feclearexcept(FE_ALL_EXCEPT);std::cout<<"std::lround(LONG_MAX+1.5) = "<< std::lround(LONG_MAX+1.5)<<'\n';if(std::fetestexcept(FE_INVALID))std::cout<<" se generó FE_INVALID\n";}

Posible salida:

round(+2.3) = 2 round(+2.5) = 3 round(+2.7) = 3 round(-2.3) = -2 round(-2.5) = -3 round(-2.7) = -3 round(-0.0) = -0 round(-Inf) = -inf lround(+2.3) = 2 lround(+2.5) = 3 lround(+2.7) = 3 lround(-2.3) = -2 lround(-2.5) = -3 lround(-2.7) = -3 lround(-0.0) = 0 lround(-Inf) = -9223372036854775808 std::lround(LONG_MAX+1.5) = -9223372036854775808 se generó FE_INVALID

[editar]Véase también

(C++11)(C++11)
Entero más cercano no mayor que el valor dado
(función)[editar]
(C++11)(C++11)
Entero más cercano entero no menor que el valor dado.
(función)[editar]
(C++11)(C++11)(C++11)
Entero más cercano no mayor en magnitud que el valor dado
(función)[editar]
close