我在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?
答案 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;
}
然后对我有用。