c++ - que - tipos de datos en access y sus propiedades
¿Por qué Microsoft abandonó el tipo de datos doble largo? (1)
Hace un tiempo escribí un programa que usaba algunas funciones factoriales. Utilicé el tipo de datos doble largo para admitir grandes números "relativos".
Ahora, cambié de codeblocks a Visualstudio 2010, me preguntaba por qué mi programa ya no funcionaba hasta que me di cuenta, después de algunas investigaciones, que la EM ha abandonado el doble tipo de datos. ¿Hay alguna razón especial para esto? A mí me parece un paso atrás en términos de tecnología.
¿Hay alguna alternativa para usar? (También estaría contento con una alternativa fuera de la biblioteca boost).
No estoy seguro de por qué cree que el long double
se "abandonó", ya que forma parte del estándar de C ++ y, por lo tanto, una implementación compatible debe, bueno, implementarlo.
Lo que "abandonaron" es una long double
sobrecarga long double
de funciones matemáticas , y lo hicieron porque:
Sin embargo, en la programación de Win32, el tipo de datos
long double
asigna al tipo de datos de precisióndouble
64 bits.
lo que, a su vez, junto con el long double
en versiones anteriores de VS de 80 bits, se debe a que :
La generación de código FP ha estado cambiando al uso de conjuntos de instrucciones SSE / SSE2 / SSE3 en lugar de la pila x87 FP, ya que eso es lo que tanto AMD como Intel generaciones recientes y futuras de chips están enfocando en sus esfuerzos de rendimiento. Estos conjuntos de instrucciones solo admiten formatos FP de 32 y 64 bits.
Sin embargo, el hecho de que hayan optado por no admitir estas sobrecargas, incluso con tipos double
y long double
mismo tamaño (ambos podrían haberse hecho de 64 bits), es una pena porque también forman parte del estándar C ++. Pero, bueno, eso es Microsoft para ti. Intencionalmente terco.
[n3290: 26.8]:
Además de las versionesdouble
de las funciones matemáticas en<cmath>
, C ++ agrega versionesfloat
ylong double
sobrecargadas de estas funciones, con la misma semántica.
Sin embargo, aunque estas sobrecargas están prácticamente en desuso en Visual Studio, todavía están disponibles, por lo que aún debería poder usarlas:
La biblioteca de tiempo de ejecución de Microsoft proporciona versiones
long double
de las funciones matemáticas solo para compatibilidad con versiones anteriores.
¿Hay alguna alternativa para usar? (También estaría contento con una alternativa fuera de la biblioteca boost).
Me parece que ha estado confiando en el long double
para admitir un rango específico de valores numéricos y, en consecuencia, se ha topado con problemas de regresión cuando eso ha cambiado en una cadena de herramientas diferente.
Si tiene un requisito de rango numérico específico, use tipos integrales de rango fijo. Aquí tienes algunas opciones:
-
stdint.h
: una característica de C99 que algunas cadenas de herramientas de C ++ admiten como extensión; -
stdint.h
: una característica de C99 que Boost re-implementa como una biblioteca; -
cstdint
: una característica de C ++ 0x que puede ser útil si está escribiendo el código de C ++ 0x.