Dado un número de coma flotante normalizado f cuál es el siguiente normalizado número de coma flotante después/antes de f.¿Cuál es el siguiente número de punto flotante normalizado después de (antes) un número de punto flotante normalizado f?
Con cambio de bit, mantisa y exponente de extracción que tienen:
next_normalized(double&){
if mantissa is not all ones
maximally denormalize while maintaining equality
add 1 to mantissa
normalize
else
check overflow
set mantissa to 1
add (mantissa size in bits) to exponent.
endif
}
Pero en lugar de hacer eso se puede hacer esto con las operaciones de punto flotante?
Como
std::numeric_limits<double>::epsilon()
no es más que una diferencia de error en un "barrio" de 1. - por ejemplo:
normalized(d+=std::numeric_limits<double>::epsilon()) = d for d large
parece más una tasa de errores de una diferencia de error, por lo que mi intuición ingenua es
(1.+std::numeric_limits<double>::epsilon())*f //should be the next.
Y
(1.-std::numeric_limits<double>::epsilon())*f //should be the previous.
En particular tengo 3 preguntas que nadie ha hecho nada de lo siguiente (por IEEE754):
1 realizado el análisis de errores) sobre este tema?
2) demostró (o puede probar) que para cualquier normalizada doble d
(1.+std::numeric_limits<double>::epsilon())*d != d ?
3) demostró que para cualquier normalizada número doble D no doble f existe tal que
d < f < (1.+std::numeric_limits<double>::epsilon())*d ?
gracias por eso (no hacer hacer mucho punto flotante) – pgast
Supongo que a diferencia de _denormals_ – kibibu
nextafter devolverá el siguiente número, incluso si eso resulta ser un número desnormalizado. El caso desnormalizado no es tan raro, sucede si llama a nextafter (0.0, 1.0), ya que el siguiente número representable después de 0 es un número desnormalizado (4e-324, cuando DBL_MIN es 2e-308). Por lo tanto, solo debe usar esta solución si el primer número no puede ser cero, o los números desnormalizados no son un problema. –