Почему я не могу прочитать эту научную запись в GMP mpf_t? - PullRequest
0 голосов
/ 23 февраля 2019

Я установил пакет libgmp3-dev в Ubuntu 18.04 и немного изучаю, как его использовать.Я написал следующую программу

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpf_t x;
    mpf_t y;

    mpf_init(x);
    mpf_init(y);

    mpf_set_str(x, "9.95697589e-06", 10);
    mpf_set_str(y, "+9.95697589e-06", 10);

    printf("x: ");
    mpf_out_str(stdout, 10, 12, x);
    printf("\n");

    printf("y: ");
    mpf_out_str(stdout, 10, 12, y);
    printf("\n");

    mpf_clear(x);
    mpf_clear(y);

    return 0;
}

И вывод выглядит как

x: 0.995697589e-5
y: 0.e0

Мне кажется странным, что вызов типа sscanf("+9.0e-5", "%lf", &my_double); прекрасно обрабатывает такой формат, но mpf_set_str не't.

Почему' y 'отображается как 0?

1 Ответ

0 голосов
/ 23 февраля 2019

Я нашел почему - код просто не обрабатывает их.

Я скачал tarball версии 6.1.2 и посмотрел на файл mpf/set_str.c.

Требуется следующее исправлениеработать с + символами в начале строки.

negative = 0;
  if (c == '-')
    {
      negative = 1;
      c = (unsigned char) *++str;
    }

  /* add this */
  else if (c == '+')
    {
      c = (unsigned char) *++str;
    }

, а затем у меня это сработало.

...