Diferenças de arredondamento no sistema baseado em Windows e Unix no sprintf

Estou com problemas nos sistemas baseados em UNIX, o sprintf não arredonda corretamente o valor.

Por exemplo

double tmp = 88888888888885.875
char out[512];

Isso é 88.888.888.888.885.875 apenas para ser mais fácil para os olhos. Estou dando um exemplo tão grande e específico, porque parece que funciona bem em números menores.

Estou tentando usá-lo da seguinte maneira

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

No Windows, isso resulta em:

out = 000088888888888885.88

Por exemplo, no AIX, mas mostra também no Linux:

out = 000088888888888885.87

Por que isso está acontecendo? Alguma idéia e como fazê-lo se comportar da mesma maneira no Win / Unix

obrigado

questionAnswers(4)

yourAnswerToTheQuestion