更新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的东西,有什么论文或好的实现吗?