Sé que el tamaño de los diferentes tipos de datos pueden cambiar dependiendo de cual es el sistema que estoy en.
Yo uso XP 32bits, y el uso de la sizeof() operador en C++, parece que el tiempo doble es de 12 bytes, y el doble es 8.

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

¿Cómo es que tengo 12 bytes? Si el tiempo doble es de hecho 12 bytes, no de esta manera se extiende el rango de valor también? O el largo de la firma es que sólo se utiliza (el compilador de figuras) cuando el valor exceda el intervalo de un tipo double, y por lo tanto, se extiende más allá de 8 bytes?

Gracias.

  • Esta es la peor característica en ISO C. I desaconsejan el uso de ella. Sólo conduce a problemas debido a que la especificación es tan flojo.
InformationsquelleAutor CppLearner | 2010-08-11

4 Comentarios

  1. 59

    Citando Wikipedia:

    En la arquitectura x86, la mayoría de los compiladores de aplicar una doble como el de 80 bits de precisión extendida de tipo compatible con el hardware (algunas veces se almacenan como 12 o 16 bytes para mantener la estructura de datos .

    y

    Compiladores también puede usar por mucho tiempo doble para una de 128 bits cuádruple formato de precisión, que actualmente está implementado en el software.

    En otras palabras, sí, un long double puede ser capaz de almacenar un mayor rango de valores de una double. Pero es completamente hasta el compilador.

    • Tipos de datos depende en gran medida de la arquitectura que se está desarrollando para.
    • También depende de las opciones del compilador. El 80 bits tipo puede ser desactivado de forma explícita en casi todos los x86 compilador.
    • Sí, acabo de decir «hasta el compilador» en el sentido de que se decida cómo almacenar sus datos. Obviamente se limita a lo que está disponible en la plataforma, y por supuesto, el compilador puede elegir para permitir a un usuario anular.
    • Apple afirma que long double es de 128 bits: developer.apple.com/library/archive/documentation/Darwin/…
  2. 5

    Para los compiladores modernos en x64, Clang y se utiliza GCC 16-byte doble para long double VC++ utiliza 8-byte doble. En otras palabras, con Clang y GCC de conseguir mayor precisión doble, pero para VC++ long double es la misma que la double. El moderno CPUs x86 apoyo a estos 16 bytes dobles así que creo que de Estruendo y GCC están haciendo lo correcto y permite el acceso a menores de hardware a nivel de capacidad de uso de lenguaje de alto nivel primitivas.

  3. 3

    El estándar byte tamaños para números son el mínimo garantizado de tamaños en todas las plataformas. Que puede ser mayor en algunos sistemas, pero nunca será menor.

  4. 0

    Tan lejos como mi programación novato experiencia solicita:

    • Uso periodicaly normalizado float [-1.0,+1.0]

    • Mantenga la normalización de valor por separado con double o long double

    • Normalizar introduce ruido=pequeños errores=frecuencias altas a
      las variables de valores

    • De vez en cuando es útil para normalizar con el valor de la mediana mantenga
      por separado y mantener los datos ordenados (datos originales de la orden podría ser salvos
      como vector de permutación)

Dejar respuesta

Please enter your comment!
Please enter your name here