Hola a todos. Soy nuevo en la lista, aunque llevo visitando la página
de CRySOL desde hace algún tiempo. Muy buen trabajo y muy útil.

Tengo una pregunta sobre C/C++. Ya hace tiempo que intento encontrar
una solución en internet, pero no la he encontrado.

La cuestión es simple: ¿por qué en gcc "double" y "long double" son
"iguales" (en el sentido de que tienen el mismo rango de valores)? Sé
que el hecho de que el tamaño de un "long double" sea igual al de un
"double" está de acuerdo con los estándares (que dicen que el tamaño
de "long double" debe ser mayor _o igual_ que el de un "double", pero:

1) ocurre que sizeof(long double) es 12, mientras que sizeof(double) es 8.

Esto podría tener una explicación sencilla teniendo en cuenta que gcc
usa por defecto la opción "-m96bit-long-double". Pero significaría
que, de esos 96 bits (12 bytes) para "long double", sólo usa 64 (8
bytes, como un double), y el resto serían ceros (?).

2) además, en "man gcc" puede leerse, donde se habla de las opciones
"-m96bit-long-double" y "-m128bit-long-double", que estas opciones no
modifican el tamaño de un long double, que es de 80 bits (y el resto
96 o 128, según la opción que se use, se rellena con ceros). Pero lo
cierto es que no usa 80 bits (10 bytes), sino sólo 64, como si fuera
un double. Esto se puede comprobar fácilmente, por ej., con estas
líneas:

long double a, b;
a = 1e+308;
b = 2e+308;

Esto da para "a" un valor correcto (1e+308), y para "b" infinito
(porque el límite del tipo "double" está en 1.79769e+308). Si "b"
fuera _realmente_ un "long double" de 10 bytes, podría alcanzar un
valor de 1.189731e+4932.

¿Alguien sabe alguna manera de solucionar este problema? Como he
dicho, llevo mucho tiempo buscando por internet, pero no he encontrado
una solución (si la hay). Lo cierto es que hay otros compiladores que
_sí_ usan realmente "long double" de 10 bytes, por lo que me extraña
que gcc (y g++) no lo hagan.

(Por cierto, he probado esto con varias versiones de gcc, desde la
3.4.6 hasta la 4.2.3.)

Gracias de antemano por vuestras respuestas.

Un saludo.
_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol

Responder a