我最近向GMP库介绍了高精度算法。这似乎很容易使用,但在我的第一个程序中,我遇到了实际问题。如何评估表达式。例如,如果我有“1 + 8 * z ^ 2”且z是mpz_t“大整数”变量,我该如何快速评估这个? (我在编写的程序中有更大的表达式。)目前,我手动执行每一个操作,并将结果存储在这样的临时变量中,用于“1 + 8 * z ^ 2”表达式:
1)首先将mpt_mul(z,z,z)改为square z
2)然后定义一个名为“8”的mpz_t变量,其值为8。
3)将第一步的结果乘以8并存储在临时变量中。
4)定义名为“one”的mpz_t变量,其值为1。
5)将其添加到步骤3中的结果中以找到最终答案。
这是我应该做的吗?或者,还有更好的方法?如果有一本GMP用户手册让人们入门,那将是非常有帮助的,但只有参考手册。
答案 0 :(得分:3)
GMP附带C++ class interface,它提供了一种更直接的表达算术表达式的方法。此接口使用C ++运算符重载来允许您编写:
mpz_class z;
1 + 8 * z**2
当然,这是假设您正在使用C ++。如果您仅使用C,则可能需要使用不提供运算符重载的GMP的C接口。
答案 1 :(得分:2)
事实证明,在“expr”子目录中有一个不受支持的表达式解析器与GMP一起分发。它不是GMP的一部分,可能会发生变化,但会在该目录的README文件中进行讨论。我们无法保证以最快的方式进行计算,因此买家要小心。
因此,除非用户希望使用此库或制作自己的表达式解析器,否则用户必须在使用GMP时手动评估所有表达式。