c long-double

no se puede imprimir correctamente un doble largo en C



long-double (1)

Hay un problema similar con MinGW en Windows. Si eso no es lo que está usando, esta respuesta probablemente no se aplique.

El problema es que el compilador (GCC) y la biblioteca de tiempo de ejecución (Microsoft) están implementados por diferentes grupos que tienen diferentes ideas sobre cómo debe representarse el tipo long double . (gcc usa 128 bits para el long double ; Microsoft usa 64 bits, con la misma representación que el double ).

Cualquiera de las opciones de representación es perfectamente legítima, pero son incompatibles entre sí. No es un error ni en GCC ni en la biblioteca de Microsoft, sino en la forma en que MinGW los integra.

Sus opciones son usar una implementación que no sea MinGW, escribir o copiar código que maneje long double correctamente, o evitar llamar a cualquier función de biblioteca que tome argumentos o devuelva resultados de tipo long double (los cálculos en long double no deberían ser un problema siempre y cuando no llamen a ninguna función de biblioteca). Por ejemplo, puede convertir a double e imprimir con %g , con alguna pérdida de rango y precisión.

Otra solución (probablemente mejor) es compilar con -D__USE_MINGW_ANSI_STDIO , lo que hace que MinGW use su propia implementación de printf y amigos en lugar de confiar en la implementación de Microsoft.

Estoy intentando imprimir un doble largo simple, pero no funciona

Lo que probé:

long double ld=5.32; printf("ld with le = %Le /n",ld); printf("ld with lf = %Lf /n",ld); printf("ld with lg = %Lg /n",ld);

Salida:

ld with le = -3.209071e-105 ld with lf = -0.000000 ld with lg = -3.20907e-105

Con un nuevo valor:

ld=6.72;

Salida:

ld with le = -1.972024e+111 ld with lf = -1972024235903379200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 ld with lg = -1.97202e+111