有没有更快更准确的atof?

时间:2015-03-12 05:31:45

标签: c++ c formatting printf atof

UPDATE1

所以在将“+ 49.984367875E-230”转换为双倍并转换回字符串之后,如何将其打印为“4.998436788E-229”?

因为我必须将“+ 49.984367875E-230”换成双倍进行比较。


将字符串转换为double并将double转换为字符串时出现问题。例如:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char a[40]={"+49.984367875E-230"};
    double d=atof(a);//d=4.9984367874999999e-229
    char b[40],c[40];
    sprintf(b,"%16.9E",d);
    grisu2(c,"%16.9E",d);//implementation of grisu2 algorithm
    printf("sprintf:%s\ngrisu2:%s\n",b,c);
    return 0;
}

结果如下:

sprintf:4.998436787E-229
grisu2:4.998436788E-229

那么,为什么stdlib的atofsprintf得到了错误的结果? 由于grisu2是正确的,所以我猜atof是好的,但是sprintf是错的?

因为我有grisu2,**所以我想要更快更准确atof,我已经搜索了互联网和堆栈溢出,但** this fast_atof并不好。

我想要像grisu2这样的东西,是否有任何纸张或良好的实施?

0 个答案:

没有答案