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

问题描述 投票:0回答:1

我在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?

gmp
1个回答
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;
    }

然后它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.