为什么我不能将这种科学记法读入GMP mpf_t中?

时间:2019-02-22 21:58:47

标签: gmp

我在Ubuntu 18.04上安装了libgmp3-dev软件包,并且正在学习如何使用它。我写了下面的程序

#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不能。

为什么“ y”显示为0?

1 个答案:

答案 0 :(得分:0)

我发现了原因-代码无法处理它们。

我下载了6.1.2版本的tarball,并查看了文件mpf/set_str.c

需要以下修复程序才能在字符串的开头使用+个字符。

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

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

然后对我有用。