我想用C++编写一个函数,使用MPFR来计算多个值。我目前使用mpfr数组来存储这些值。不知道每次需要计算和存储多少个值。这里是功能:替代使用mpfr数组
void Calculator(mpfr_t x, int v, mpfr_t *Values, int numOfTerms, int mpfr_bits) {
for (int i = 0; i < numOfTerms; i++) {
mpfr_init2(Values[i], mpfr_bits);
mpfr_set(Values[i], x, GMP_RNDN);
mpfr_div_si(Values[i], Values[i], pow(-1,i+1)*(i+1)*pow(v,i+1), GMP_RNDN);
}
}
程序本身有一个while循环,它有一个嵌套for循环,它接受这些值并对它们进行计算。这样,我不必在for循环中每次重新计算这些值。当for循环结束后,我清除与
delete[] Values;
内存中的while循环在这种情况下,再次启动之前,redeclares与
mpfr_t *Values;
Values = new mpfr_t[numOfTerms];
需要是值的数量数组存储的数据由不同的函数计算,并通过变量numOfTerms通知函数。问题在于,出于某种原因,该阵列极大地减慢了程序的速度。我正在处理非常大的数字,所以我认为如果每次都重新计算这些值,它会变得非常昂贵,但是这种方法比重新计算for循环的每次迭代中的值要慢得多。有没有其他方法呢?
编辑**而不是每次重新声明数组,我移动了while循环之外的声明和delete []值。现在我只是清除阵列中的每个元素
for (int i = 0; i < numOfTerms; i++) {
mpfr_clear(Values[i]);
}
在while循环之前的while循环重新开始。该程序的速度显着提高,但仍然比仅计算每个值慢得多。
pow(-1,i + 1)看起来像是改变符号的昂贵方式。 – 2015-04-10 00:53:41