我在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?
我找到了原因 - 代码只是不处理它们。
我下载了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;
}
然后它对我有用。