0

GMP と MPI を使用して精度 PI を計算しています。現在、ワーカー プロセスで PI を計算しており、それをファーマー プロセスに送り返す必要があります。これを行うために、char 配列に変換しました。

mp_exp_t exp; 
pi_str = mpf_get_str(pi_str,
                         &exp,
                         10,
                         (size_t)PRECISION,
                         pi);

char send_str[3026]= {0};
strcpy(send_str,pi_str);                      

MPI_Send(&send_str, len, MPI_CHAR, 0, 1, MPI_COMM_WORLD);

これで問題なく動作し、char 配列を受け取ったので、他の計算を実行する必要があるため、char 配列を float に戻す必要があります。

char recv_str[3026] = {0};
    for(i=1; i<size ; i++)
    {
       printf("farmer**%d\n",size);
       MPI_Recv(&recv_str,3026, MPI_CHAR, i, 1,MPI_COMM_WORLD,  &status);
       printf("pi after send %s", recv_str);
       mpf_set_str(pi_ret, recv_str, 10);  
       gmp_printf("setting from string to float %.Ff\n", pi_ret, 20); 

これによりメモリ割り当てエラーが発生しますが、何かが欠けていない限り、フロートに戻す別の方法はわかりません。

4

1 に答える 1

0

pi_ret値を割り当てる前に初期化する必要があります。

これを行う最も簡単な方法は、mpf_init_set_str()関数を使用することです。この関数は、浮動小数点数を初期化し、その値を文字列から割り当てます。

于 2013-11-05T16:13:21.610 に答える