[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gmp-bugs
Subject:    mpf_set_str doesn't seem to work for numbers with + prefix
From:       marc.glisse () inria ! fr (Marc Glisse)
Date:       2011-09-26 20:39:09
Message-ID: alpine.DEB.2.02.1109262215390.2306 () laptop-mg ! saclay ! inria ! fr
[Download RAW message or body]

On Sat, 17 Sep 2011, Ronald Bruck wrote:

> I've tried the following program in both Linux (SuSE 11.4, GMP 5.0.2) and Mac OS X \
> (10.7 "Lion", GMP 5.0.2): 
> #include <stdio.h>
> #include <gmp.h>
> 
> int main()
> {
> mpf_t fx;
> double x;
> int ch;
> char str[128];
> 
> mpf_init2 (fx, 64);
> 
> while (((ch = fgetc(stdin)) != EOF)&&(ch != '\n')) {
> ungetc (ch, stdin);
> scanf ("%s", str);
> sscanf (str, "%lf", &x);
> mpf_set_str (fx, str, 10);
> gmp_printf ("x = %lf fx = %Fg str = '%s'\n", x, fx, str);
> }
> }
> 
> If I try it on an input line of "+5.179" the output is
> 
> x = 5.179000 fx = 0 str = '+5.179'
> 
> This is completely unexpected behavior; "+5.179" is a perfectly legal format for a \
> real number, and may easily be read in the output of another C program which uses a \
> "%+.3lf" format string, for example.  (That's usually done for alignment reasons.) 
> When GMP reads a number with a preceding "+" sign, it returns 0.  Same deal with \
> mpf_inp_str.  Is this documented?  Shouldn't it be fixed?  (But first, is this what \
> others observe?) 
> The bug--if bug it is--bit me VERY hard recently, when my program suite suddenly \
> quit working correctly.

I couldn't find a mention of this in the public documentation. It is 
documented in the code though; scanf has this comment:
       /* don't store '+', it's not accepted by mpz_set_str etc */
so it doesn't look like an accident.

I just found this:
http://gmplib.org/list-archives/gmp-bugs/2008-May/001007.html

which seems to say that this behavior might change (lack of time being one 
of the main obstacles).

-- 
Marc Glisse


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic