更新1
「+49.984367875E-230」を double に変換し、文字列に変換した後、「4.998436788E-229」として出力するにはどうすればよいですか?
比較を行うには、「+49.984367875E-230」を double に変換する必要があります。
string を double に、double を string に変換するときに問題が発生しました。例えば:
#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
正確な.
grisu2のようなものが欲しいのですが、紙や良い実装はありますか?