gcc - Compila el código c con float en lugar de double
floating-point (2)
typedef double float;
Antes de que funcione cualquier duplicación que desee reemplazar, tenga en cuenta que puede confundir algunas bibliotecas externas.
En el futuro, el mejor enfoque es definir su propio tipo de flotador:
#ifdef USE_FLOATS
typedef float MyFloatType;
#else
typedef double MyFloatType;
#endif
O use plantillas, que tiene el beneficio adicional de permitirle cambiar el código en tiempo de ejecución para usar uno u otro.
Tengo un largo esquema de integración numérica escrito en C. Me gustaría probar mi algoritmo en precisión de punto flotante. ¿Hay alguna manera de decirle a gcc que disminuya cada vez que aparece el double
para float
en todo el programa?
No puede hacer esto de manera segura sin modificar su código fuente, pero eso no debería ser terriblemente difícil de hacer.
Usar el preprocesador para forzar que la palabra clave double
en su programa sea tratada como float
es una mala idea; hará que su programa sea difícil de leer, y si utiliza el long double
cualquier lugar, se trataría como long float
, que es un error de sintaxis.
Como sugiere la respuesta de stix , puede agregar un typedef
, ya sea en la parte superior de su programa (si es un único archivo fuente) o en un encabezado #include
por todos los archivos fuente relevantes:
typedef double real; /* or pick a different name */
Luego revise su código fuente y cambie cada ocurrencia de double
a real
. (Tenga cuidado al hacer una búsqueda global ciega y reemplazar).
Asegúrese de que el programa todavía compila, ejecuta y se comporta de la misma manera después de este cambio. Luego puedes cambiar typedef a:
typedef float real;
y recompilar para usar float
lugar de double
.
Aunque no es tan simple. Si está utilizando funciones declaradas en <math.h>
, querrá usar la función correcta para cualquier tipo de punto flotante que esté usando; por ejemplo, sqrt()
es para double
, sqrtf()
para float
y sqrtl()
para long double
.
Si su compilador lo admite, puede usar el <tgmath.h>
, que define las macros genéricas de tipo correspondientes a las funciones matemáticas de <math.h>
. Si usa <tgmath.h>
, entonces sqrt(x)
resolverá llamar a la función de raíz cuadrada correcta según el tipo de argumento.