tipos simples long float entre dobles diferencia datos comillas c++ floating-point long-double

simples - long double c++



largo doble contra doble (4)

Citando de Wikipedia :

En la arquitectura x86, la mayoría de los compiladores implementan el doble largo como el tipo de precisión extendida de 80 bits admitido por ese hardware (a veces almacenado como 12 o 16 bytes para mantener la estructura de datos).

y

Los compiladores también pueden usar el doble largo para un formato de cuádruple precisión de 128 bits, que actualmente se implementa en el software.

En otras palabras, sí, un long double puede almacenar un rango mayor de valores que un double . Pero depende completamente del compilador.

Sé que el tamaño de varios tipos de datos puede cambiar dependiendo del sistema en el que estoy. Yo uso XP 32bits, y usando el operador sizeof () en C ++, parece que el doble largo es de 12 bytes, y el doble es 8.

Sin embargo, la mayoría de las fuentes principales afirman que el doble largo es de 8 bytes, y el rango es por lo tanto el mismo que el doble.

¿Cómo es que tengo 12 bytes? Si el doble largo es de hecho 12 bytes, ¿no extiende esto también el rango de valores? ¿O la firma larga solo se usa (las cifras del compilador) cuando el valor excede el rango de un doble, y por lo tanto, se extiende más allá de 8 bytes?

Gracias.


En cuanto a mi experiencia de novato en programación me sugiere:

  • Utilice flotador normalizado periodicaly [-1.0, + 1.0]

  • Mantenga el valor de normalización por separado con el doble o el doble largo

  • La normalización introduce ruido = pequeños errores = altas frecuencias a los valores de las variables

  • De vez en cuando, es útil normalizar con el valor mediano mantener por separado y mantener los datos ordenados (el orden de los datos originales podría guardarse como vector de permutación)


Los tamaños de bytes estándar para números son los tamaños mínimos garantizados en todas las plataformas. Pueden ser más grandes en algunos sistemas, pero nunca serán más pequeños.


Para compiladores modernos en x64, Clang y GCC usan doble de 16 bytes para long double mientras que VC ++ usa doble de 8 bytes. En otras palabras, con Clang y GCC obtiene una mayor precisión doble, pero para VC ++ long double es igual a double . Las CPU x86 modernas son compatibles con estos dobles de 16 bytes, por lo que creo que Clang y GCC están haciendo lo correcto y le permiten acceder a la capacidad de hardware de nivel inferior utilizando primitivas de lenguaje de nivel superior.