0

更新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

では、なぜ stdlibatofsprintf間違った結果が得られたのでしょうか? grisu2 が正しいので、atof良いと思いますが、sprintf間違っていますか?

grisu2 を持っているので、**より速くatof正確.

grisu2のようなものが欲しいのですが、紙や良い実装はありますか?

4

0 に答える 0