【问题标题】:Handling expressions in GMP处理 GMP 中的表达式
【发布时间】:2009-10-08 07:47:20
【问题描述】:

我最近向自己介绍了高精度算术的 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 的用户手册可以帮助人们入门,那将非常有帮助,但只有参考手册。

【问题讨论】:

    标签: gmp


    【解决方案1】:

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

    mpz_class z;
    1 + 8 * z**2
    

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

    【讨论】:

    • 在这种情况下,您采取了正确的方法。如果您打算经常做这类事情,您可能希望考虑迁移到 C++。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2017-10-29
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多