mpf_set_str doesn't seem to work for numbers with + prefix

Ronald Bruck rbruck at
Sun Sep 18 06:13:22 CEST 2011

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.

-- Ron Bruck

More information about the gmp-bugs mailing list