Subject: Re: scanf misses NAN and INF (patch to review)
To: Thor Lancelot Simon <tls@rek.tjls.com>
From: Emmanuel Dreyfus <manu@netbsd.org>
List: tech-userlevel
Date: 04/04/2007 07:56:39
Thor Lancelot Simon <tls@rek.tjls.com> wrote:

> > What do you mean? The case where the object is not a float? I'm in case
> > CT_FLOAT, so this should be adressed...
> 
> No.  Not all floating-point formats have "not a number" or IEEE-style
> infinities, and we run on at least two machines where there is no
> floating point format that does, plus at least one where one of the
> available floating points doesn't (though we don't support it).

Please give more details, I'm really clueless on this topic.

I try to fix that bug:

#include <stdio.h>
#include <math.h>

int
main(void)
{
        float f,g;
        int hit;
        char s[512];

        f = sqrt(-1);

        printf("f = %f\n", f);
        snprintf(s, sizeof(s), "%f", f);
        printf("s = \"%s\"\n", s);
        hit = sscanf(s, "%f", &g);
        printf("hit = %d\n", hit);
        printf("g = %f\n\n", g);

        return 0;
}

On -current, this produces:
f = nan
s = "nan"
hit = 0
g = 0.000000

With my patch:
f = nan
s = "nan"
hit = 1
g = nan

Can you give me an example where the patch would not be appropriate?

-- 
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu@netbsd.org