2012-06-10 48 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++的更近似的库。我没有意识到这是完全或甚至是非常好的图书馆。