07/11/16 16:49:36
文字列を倍精度に変換する関数strtodにバグがあるようでうまく変換してくれません。
const char* pszInput = "9999999999999999999999999999999999999999999999999999999999999999999999999999999999";
char* pszStop;
double dOutput;
dOutput = ::strtod(pszInput, &pszStop);
::printf("input:%s\noutput:%f\nstop:%s\n", pszInput, dOutput, pszStop);
output:9999999999999999600000000000000000000000000000000000000000000000000000000
000000000.000000
となってしまいます。ERANGEも検出されません。
これはよく知られたバグなのでしょうか?また対策はあるのでしょうか?
よろしくお願いします。