我正在使用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);
这给了我一个内存分配错误,但我看不到另一种转换回float的方法,除非我遗漏了什么。
答案 0 :(得分:0)
在为其分配值之前,您需要初始化pi_ret
。
最简单的方法是使用mpf_init_set_str()
function,它同时初始化一个浮点数并从一串字符中赋值。