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