2009-10-06 54 views
2

我最近向自由介紹了GMP庫的高精度算術。這似乎很容易使用,但在我的第一個程序中,我遇到了實際問題。如何評估表達式。例如,如果我有「1 + 8 * z^2」而z是一個mpz_t「大整數」變量,我該如何快速評估它? (我在編寫程序時有更大的表達式。)目前,我正在手動執行每項操作,並將結果存儲在「1 + 8 * z^2」表達式中的臨時變量中:在GMP中處理表達式

1 )第一做mpt_mul(Z,Z,Z)方ž

2)然後,通過這8個定義名爲 「八」 與值8

3)從步驟一個相乘結果的mpz_t變量和存儲在臨時變量中。

4)定義名爲「一」與值1

5 mpz_t變量)該步驟3中添加到結果找到最終答案。

這是我應該做的事情嗎?或者,還有更好的方法?如果有GMP的用戶手冊讓人們開始使用,但只有參考手冊,這將非常有幫助。

回答

3

GMP附帶C++ class interface,它提供了更直接的表達算術表達式的方式。該接口使用C++運算符重載允許你寫:

mpz_class z; 
1 + 8 * z**2 

這是當然,假設你使用C++。如果您僅使用C,則可能需要使用不提供操作員重載的GMP的C接口。

+0

是的。我正在使用純C。 – 2009-10-06 23:57:30

+0

在這種情況下,您正在採取正確的方法。如果你打算做很多事情,你可能會考慮轉向C++。 – 2009-10-07 00:00:11

2

原來,在「expr」子目錄中有一個不受支持的表達式解析器與GMP一起分發。這不是GMP的一部分,可能會發生變化,但會在該目錄的README文件中討論。不能保證以最快的方式進行計算,所以買家要小心。

因此,用戶必須在使用GMP時手動評估所有表達式,除非他們希望使用此庫或創建他們自己的表達式解析器。