En los encabezados stdint.h(C99), boost / cstdint.hpp y cstdint(C ++ 0x) se encuentra, entre otros, el tipo int32_t.
¿Existen tipos de coma flotante de tamaño fijo similares? Algo como float32_t?
En los encabezados stdint.h(C99), boost / cstdint.hpp y cstdint(C ++ 0x) se encuentra, entre otros, el tipo int32_t.
¿Existen tipos de coma flotante de tamaño fijo similares? Algo como float32_t?
sizeofoperador. Un tipo como este sería útil cuando un algoritmo requiere que tenga un tamaño específico conocido.
sizeofpuede utilizar para resolver el problema de ordenar y deshacer consistentemente tipos flotantes?
Respuestas:
No existe nada parecido en los estándares C o C ++ en la actualidad. De hecho, ni siquiera hay garantía de que floatsea un formato binario de punto flotante.
Algunos compiladores garantizan que el floattipo será el formato binario de 32 bits IEEE-754. Algunos no. En realidad, floates del tipo IEEE-754 singleen la mayoría de las plataformas no integradas, aunque se aplican las advertencias habituales sobre algunos compiladores que evalúan expresiones en un formato más amplio.
Hay un grupo de trabajo que discute la adición de enlaces de lenguaje C para la revisión de 2008 de IEEE-754, que podría considerar recomendar que se agregue tal typedef. Si esto se agrega a C, espero que el estándar C ++ siga su ejemplo ... eventualmente.
Si desea saber si floates del tipo IEEE de 32 bits, verifique std::numeric_limits<float>::is_iec559. Es una constante en tiempo de compilación, no una función.
Si desea ser más a prueba de balas, también verifique std::numeric_limits<float>::digitsque no estén usando furtivamente el estándar IEEE de doble precisión para float. Debería ser 24.
Cuando se trata de long double, es más importante verificar digitsporque hay un par de formatos IEEE que podrían ser razonablemente: 128 bits (dígitos = 113) u 80 bits (dígitos = 64).
No sería práctico tenerlo float32_tcomo tal porque generalmente desea usar hardware de punto flotante, si está disponible, y no recurrir a una implementación de software.
long doubleformato en OS X (Intel de 32 y 64 bits) es exactamente el formato doble extendido IEEE-754 almacenado en orden little-endian. No tiene nada de raro. Los bytes 0-7 contienen el campo de significado, y los bytes 8 y 9 contienen los campos de exponente y signo.
5.0Ltiene un significado de a000000000000000. Su exponente insesgado es +2, y el sesgo del exponente doble extendido es 3fff, por lo que el exponente sesgado para 5.0L es 4001. El patrón de bytes real cuando se almacena en orden little-endian es 00 00 00 00 00 00 00 a0 01 40, y si lo ve como dos enteros little-endian de 64 bits, verá exactamente lo que observó.
4001en little-endian es 01 40 00 00 ...Si nada más, el byte menos significativo es lo primero. Espero que la secuencia a0 01 40aparezca en algún lugar del número (si solo realizaron una rotación) pero no creo que hayas explicado por qué a0y 01 40estás en mitades completamente separadas.
Si cree que tener typedefs como float32_t y float64_t no es práctico por alguna razón, debe estar demasiado acostumbrado a su sistema operativo conocido, el compilador, que no puede mirar fuera de su nido.
Existe hardware que ejecuta de forma nativa operaciones de punto flotante IEEE de 32 bits y otros que lo hacen de 64 bits. A veces, estos sistemas incluso tienen que comunicarse entre sí, en cuyo caso es extremadamente importante saber si un doble es de 32 bits o 64 bits en cada plataforma. Si la plataforma de 32 bits hiciera cálculos excesivos sobre la base de los valores de 64 bits de la otra, es posible que deseemos lanzar a la precisión más baja según los requisitos de tiempo y velocidad.
Personalmente, me siento incómodo usando flotadores y dobles a menos que sepa exactamente cuántos bits hay en mi plataforma. Más aún si tengo que transferirlos a otra plataforma a través de algún canal de comunicaciones.
Actualmente existe una propuesta para agregar los siguientes tipos al idioma:
decimal32
decimal64
decimal128
que algún día será accesible a través de #include <decimal>.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html
decimal24hacer cosas como leer archivos WAV con muestras de 24 bits más fáciles!