std::nearbyint, std::nearbyintf, std::nearbyintl
| Definido en el archivo de encabezado <cmath>
|
||
float nearbyint ( float arg );
float nearbyintf( float arg );
|
(1) | (desde C++11) |
double nearbyint ( double arg );
|
(2) | (desde C++11) |
long double nearbyint ( long double arg );
long double nearbyintl( long double arg );
|
(3) | (desde C++11) |
double nearbyint ( TipoEntero arg );
|
(4) | (desde C++11) |
arg a un valor entero en formato de punto flotante, usando el modo de redondeo actual.double).Parámetros
| arg | - | Valor de punto flotante. |
Valor de retorno
El valor entero más cercano a arg, según el modo de redondeo actual.
Manejo de errores
Esta función no está sujeta a ninguno de los errores especificados en math_errhandling.
Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):
- Nunca se genera FE_INEXACT.
- Si
arges +∞, se devuelve +∞. - Si
arges -∞, se devuelve -∞. - Si
arges +0, se devuelve +0. - Si
arges -0, se devuelve -0. - Si
arges NaN, se devuelve NaN.
Notas
La única diferencia entre std::nearbyint y std::rint es que std::nearbyint nunca genera FE_INEXACT.
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::nearbyint 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.
Si el modo de redondeo actual es FE_TONEAREST, esta función redondea a par en la mitad de los casos (como rint, pero a diferencia de round).
Ejemplo
#include <iostream>
#include <cmath>
#include <cfenv>
int main()
{
#pragma STDC FENV_ACCESS ON
std::fesetround(FE_TONEAREST);
std::cout << "redondeando al más cercano: \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 << "redondeando hacia abajo:\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';
}
Salida:
redondeando al más cercano:
nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 4
nearbyint(-2.3) = -2 nearbyint(-2.5) = -2 nearbyint(-3.5) = -4
redondeando hacia abajo:
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
Véase también
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
Entero más cercano usando el modo de redondeo actual con excepción si el resultado difiere (función) |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
Entero más cercano, redondeando alejándose de cero en los casos intermedios (función) |
(C++11)(C++11) |
Obtiene o establece la dirección redondeo (función) |
Documentación de C para nearbyint
| |