-4

私のプログラムのすべての変数は、次のデータ型を使用します

typedef long long ll;

私はGMPをインストールし、これをやろうとしました:

typedef mpz_class ll;

そして私は試しました

typedef mpz_t ll;

しかし、通常は大量の「無効な演算子」エラーが発生してコンパイルされません。物事を翻訳する簡単な方法はありますか?

エラー例:

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

タイプ double からの無効な static_cast __gmp_expr<__mpz_struct[1], __gmp_binary_expr<mpz_class, long int, __gmp_binary_divides> >' to type'

別のもの:

count-=myArr[m];

「myArr[m]」の「operator[]」に一致しません

それもさせてくれない

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

ここで、x は long long です

4

1 に答える 1

2

まず第一に、mpz_t は C++ クラスではなく C 構造体であるため、演算子のオーバーロードがありません。次に、mpz_class は、いくつかの基本的な演算子のオーバーロードがあるため、整数のように動作します。ただし、他の種類の整数値のドロップイン置換としては絶対に機能しません。プログラムを調べて、現在のコードを mpz_class 値で機能する次のコードに置き換えて、すべてのエラーを修正する必要があります。これを行う簡単な方法はありません。弾丸をかじり、GMP を効果的に使用する方法を学ばなければなりません。

または、CLN や、C++ の多数のドロップイン置換に近い近似値を提供しようとする別のライブラリのようなものを使用することもできます。私が知っているライブラリで、これを完全に、または非常にうまく行うライブラリはありません。

于 2012-06-10T20:51:59.607 に答える