2

我最近向自己介绍了高精度算术的 GMP 库。它似乎很容易使用,但在我的第一个程序中,我遇到了实际问题。如何评估表达式。例如,如果我有 "1+8*z^2" 并且 z 是一个 mpz_t "大整数" 变量,我该如何快速评估呢?(我正在编写的程序中有更大的表达式。)目前,我正在手动执行每个操作并将结果存储在临时变量中,例如“1+8*z^2”表达式:

1) 首先做 mpt_mul(z,z,z) 平方 z

2) 然后定义一个名为“8”的 mpz_t 变量,其值为 8。

3) 将第一步的结果乘以这个 8 并存储在 temp 变量中。

4) 定义名为“one”的 mpz_t 变量,其值为 1。

5) 将此添加到步骤 3 的结果中以找到最终答案。

这是我应该做的吗?或者,还有更好的方法?如果有 GMP 的用户手册可以帮助人们入门,那将非常有帮助,但只有参考手册。

4

2 回答 2

3

GMP 带有一个C++ 类接口,它提供了一种更直接的方式来表达算术表达式。该接口使用 C++ 运算符重载来允许您编写:

mpz_class z;
1 + 8 * z**2

当然,这是假设您使用的是 C++。如果您只使用 C,您可能需要使用不提供运算符重载的 GMP 的 C 接口。

于 2009-10-06T19:19:56.170 回答
2

原来在“expr”子目录中有一个不受支持的表达式解析器,它与 GMP 一起分发。它不是 GMP 的一部分,可能会发生变化,但在该目录的 README 文件中进行了讨论。不能保证以最快的方式进行计算,所以买家要小心。

因此,用户在使用 GMP 时必须手动评估所有表达式,除非他们希望使用此库或制作自己的表达式解析器。

于 2009-10-07T23:47:20.133 回答