Redondeo de las diferencias en el sistema basado en Windows vs Unix en sprintf

Tengo un problema en los sistemas basados en UNIX sprintf no redondea correctamente el valor.

Por ejemplo

double tmp = 88888888888885.875
char out[512];

Eso es 88,888,888,888,885.875 solo para ser más fácil para los ojos. Estoy dando un ejemplo tan específico y grande porque parece que funciona bien en números más pequeños.

Estoy tratando de usarlo de la siguiente manera

sprintf(out, "%021.2f", tmp);
printf("out = %s\n", tmp);

En Windows esto da como resultado:

out = 000088888888888885.88

Por ejemplo, en AIX, pero también se muestra en Linux:

out = 000088888888888885.87

¿Por qué está pasando esto? Cualquier idea y cómo hacer que se comporte de la misma manera en Win / Unix

Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta