c++ - resueltos - Genere el siguiente número de punto flotante representable más grande o más pequeño sin la combinación de bits
que es coma flotante en informatica (2)
En C ++ 11, usas std::nextafter()
. Al nextafterf
eso, en un sistema C99, usa nextafterf
, nextafter
o nextafterl
de la biblioteca matemática C (para los tipos float
, double
y long double
, respectivamente).
Dado un número de punto flotante finito arbitrario, ¿hay una manera de determinar cuál será el próximo número de punto flotante representable? Por ejemplo, dado 1.0f, por definición, el siguiente número más grande representable es 1.0f + std :: numeric_limits <float> :: epsilon (). ¿Hay una manera de sintetizar un épsilon para cualquier valor, no solo 1.0f, sin recurrir a los cambios de bits y / o al conocimiento explícito de cómo la máquina representa los valores de punto flotante?
int exponent;
significand= frexp(number, &exponent);
significand+= epsilon;
next= ldexp(significand, exponent);
Lo que esto hace es extraer la mantisa, incrementarla por el punto flotante épsilon, luego reconstruir el número del punto flotante. Ese debería ser el siguiente número representable que obtendrías jugando con los bits de la mantisa (y el exponente en el exceso de mantisa).