1

mpz_importメソッドを使用して 64 ビット整数を gmp にロードしたいのですが、数値を文字列にストリーミングしてから割り当て演算子を使用することでこれを達成できることはわかっていますが、これは確かに遅く、最適ではありません。

このコードは、OSX を実行している 64 ビット MacBook では正常に動作しますが、Raspbian、32 ビット Ubuntu サーバー、および 64 ビット Linux Mint を実行しているラズベリー パイではセグメンテーション エラーで失敗し、すべて mpz_import 行で失敗します。

これがgcc 4.7でコンパイルされたコードですg++ -std=c++11 -lgmp -lgmpxx main.cpp

#include <iostream>
#include <cstdint>
#include <gmp.h>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_t a;
    int64_t b = 4;
    mpz_import(a, 1, 1, sizeof(b), 0, 0, &b); //segfault on this line
    mpz_class c(a);
    cout << c << endl;
}
4

1 に答える 1

2

mpz_import で使用する前に mpz_init a が必要です。ドキュメントから:

unsigned long  a[20];
/* Initialize z and a */
mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a);
于 2013-02-13T18:47:41.737 に答える