04/02/2013, 03:39
|
| | Fecha de Ingreso: junio-2010 Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses Puntos: 73 | |
Respuesta: Números Subnormales en C (estándar C99 y GCC 4.7) Aunque no conozco en detalle el estándar C99, supongo que se debe a cómo se efectúan los cálculos en coma flotante.
El procesador de coma flotante utiliza internamente un tipo de 80 bits para prevenir los posibles overflow/underflow en los cálculos con tipos float y double. Este tipo de 80 bits (10 bytes) es accesible como long double, el tamaño que te indicará el operador sizeof probablemente será, por cuestiones de direccionamiento, de 12 bytes en sistemas de 32 bits (aunque sólo se utilicen 10) y de 16 en sistemas de 64 bits. Ojo, porque hay compiladores en los que el tipo long double es sinónimo de double (creo que Visual C es uno de ellos).
Supongo que lo que ocurre es que, dado que hay promoción a long double, el valor FP_SUBNORMAL te lo devolverá cuando el resultado de tu operación vaya a ser un valor subnormal... para long double.
Prueba a ver qué pasa definiendo esa macro como 0 (no se promociona) ó 1 (float promociona a double), y me cuentas. Yo voy a hacer lo propio, me ha picado el gusanillo.
Saludos, |