20/02/2013, 17:36
|
| | Fecha de Ingreso: junio-2005 Ubicación: Argentina
Mensajes: 90
Antigüedad: 19 años, 5 meses Puntos: 2 | |
Respuesta: Números Subnormales en C (estándar C99 y GCC 4.7) Hola.
Gracias por seguirme prestando atención con este asunto.
Es cierto que el estándar C99 es sólo una "recomendación".
Pero cuando el compilador GCC toma como opción de línea de comandos la opción -std=c99, entonces tiene que comportarse dentro de lo que el estándar obliga y/o permite.
No sé si fui claro con eso, pero yo estoy trabajando exclusivamente con esa opción del compilador, o sea, el estándar.
De hecho, cuando no pongo esa opción, la comparación me da correcta.
Ya sé que la constante no "despromociona", por eso lo puse entre comillas.
A veces soy algo cavernícola para explicar las cosas.
Lo que tal vez intento decir, más o menos, es que previamente hay un cálculo que convierte el decimal 1.1F a binario en alta precisión, y luego se lo redondea a la precisión de "float" dada por el sufijo "F".
Ya conozco los problemas de comparaciones con punto flotante.
Lo que me interesa discernir es qué dice el estándar al respecto, y si es consecuente con lo que obtengo con el compilador.
Creo que esto de la constante te lo había comentado a modo de curiosidad.
Mi duda va por el lado de la macro fpclassify().
______________
Para poder visualizar los valores de punto flotante en formato hexadecimal, se requiere compilar con la opción -std=c99, porque el estándar C99 es el que ha introducido esta nueva opción. Es con el especificador de formato %a.
Por ejemplo:
printf("%a", 1.23456); /* Muestra la constante en formato hexadecimal */
___________________
Mi queja, por llamarlo así, es acerca de la detección de números subnormales con fpclassify(),
la cual tiene que detectar correctamente el tipo de punto flotante,
o al menos la precisión del tipo (acorde al tamaño en bytes por ejemplo),
y luego indicar si el valor representado es subnormal o no lo es, para el rango de valores del tipo.
Les he planteado la cuestión a los desarrolladores de la implementación MinGW del GCC, y han dictaminado que es un tema pendiente de investigación.
Es más, creo que lo han aceptado como un bug, y planean corregirlo para la versión 4.1 de MinGW.
Por lo tanto yo consideraria que la pregunta original que hice en este hilo está resuelta.
Un saludo |