2012-06-10 29 views
-4

所有的變量在我的程序中使用下面的數據類型轉換一個C++程序使用GMP

typedef long long ll; 

我安裝了GMP,並試圖做到這一點:

typedef mpz_class ll; 

,我試圖

typedef mpz_t ll; 

但它不會編譯,通常會有大量的「無效操作符」錯誤。有什麼更簡單的方法來翻譯的東西嗎?

例錯誤:

ll a = sqrt(static_cast<double>(n/2)); 

__gmp_expr<__mpz_struct[1], __gmp_binary_expr<mpz_class, long int, __gmp_binary_divides> >' to type型雙無效的static_cast」

另一個問題:

count-=myArr[m]; 

敵不過 '' 中 'myArr,該[米]操作符[]'

它也不會讓我做

mpz_t count; 
count = (x*x-1); 

其中x是一個很長很長

+3

GMP是一個C庫。所以它沒有重載的操作符。 – Mysticial

+0

你能舉一個它失敗的具體例子嗎? –

+1

@Mysticial:見++:http://gmplib.org/manual/C_002b_002b-Class-Interface.html#C_002b_002b-Class-Interface。 –

回答

2

首先,mpz_t沒有任何操作符重載,因爲它是一個C結構,而不是C++類。接下來,mpz_class的行爲類似於整數,因爲它有一些基本的運算符重載。不過,它絕對不是作爲一些其他類型的整數值的直接替換工作。你將不得不通過你的程序來修復所有的錯誤,把你當前的代碼替換成mpz_class值的下一個代碼。做到這一點並不是一件容易的事:你必須咬緊牙關,學會如何有效地使用GMP。

或者,您可以嘗試使用類似CLN或另一個庫的類似於C++的大量替代C++的更近似的庫。我沒有意識到這是完全或甚至是非常好的圖書館。