0

更新1

因此,在将“+49.984367875E-230”转换为双精度并转换回字符串后,如何将其打印为“4.998436788E-229”?

因为我必须将“+49.984367875E-230”转换为加倍才能进行比较。


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

#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

那么,为什么 stdlibatof得到sprintf了错误的结果呢?由于 grisu2 是对的,所以我想atof是好的,但是sprintf错了吗?

因为我有grisu2,**所以我想要一个更快更准确的atof,我已经搜索了互联网和stackoverflow,但是**这个fast_atof不好。

我想要类似grisu2的东西,有什么论文或好的实现吗?

4

0 回答 0