6

En pocos sistemas, el doble es igual que el doble largo. ¿Cómo puedo detectar si el doble largo tiene una precisión mayor que el doble en el tiempo de compilación y usarlo para la compilación condicional?cómo detectar si el doble largo es de precisión extendida o no está en tiempo de compilación

veo que hay macros predefinidas presentes en libgcc SIZEOF_DOUBLE y SIZEOF_LONG_DOUBLE Pero no son portátiles a través de diferentes cadenas de herramientas.

¿Hay alguna manera de hacerlo?

+0

Puede intentar 'sizeof (double)> 8'. Aunque tampoco es portátil, probablemente funcione en la mayoría de los casos. – Mysticial

+0

¿No puedes probar 'sizeof (double)

+2

El preprocesador no reconoce 'sizeof'. –

Respuesta

5

Puede comparar DBL_MANT_DIG y LDBL_MANT_DIG de float.h.

1

Puede probar, p.

#if DBL_MANT_DIG < LDBL_MANT_DIG 

o similares valores definidos en float.h

0

La solución "correcta" a este problema (como el usado por muchos proyectos) es crear un script de configuración.

La secuencia de comandos de configuración ejecuta varias pruebas que incluyen la compilación y la ejecución de pequeños programas para determinar las propiedades del sistema y del compilador. El script luego escribe sus hallazgos como un archivo de encabezado, un archivo MAKE o ambos. Por supuesto, el tuyo puede hacer lo que quieras.

Existen herramientas para hacer este tipo de cosas de manera semiautomática, pero probablemente sean exageradas para usted. Si desea echar un vistazo, los nombres son autoconf y automake. Tenga en cuenta que no son simples de aprender, pero generan scripts de configuración y makefiles que deberían funcionar en casi cualquier plataforma, siempre que tenga un shell de estilo Unix y GNU make.

Cuestiones relacionadas