我正在使用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);


这给我带来了内存分配错误,但是除非丢失了某些东西,否则我看不到另一种转换回浮点数的方法。

最佳答案

您需要先初始化pi_ret,然后再为其分配值。

最简单的方法是使用mpf_init_set_str() function,它同时初始化一个浮点数并从一个字符串中分配其值。

关于c - GMP将char数组转换为float,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19793272/

10-10 16:45