我正在使用C GMP库,我正在尝试计算一个浮点数,其mpf_t类型被提升到1.0 / n的幂,其中n是一个int。但是,这种类型的pow功能似乎只需要输入整数输入功率。这个库中是否有一个函数可以以双精度的形式执行,如果没有,是否可以使用快速算法?
答案 0 :(得分:1)
这个库中是否有一个可以以形式执行权限的函数 双打,
没有。
如果没有,是否可以使用快速算法?
是
权力x
1.0/n
与n
的方x
根相同。还有一种有效的计算算法,请参阅:nth root algorithm - Wikipedia
这是可以轻松适应GMP的C代码。
功能:
void mpf_pow_ui (mpf_t rop, const mpf_t op1, unsigned long int op2);
- 将rop
设置为op1
,提升为op2
,可用于代替dexp
。
#include <stdlib.h>
#include <stdio.h>
double dexp(double a, double toN){
double ret = 1;
for(int i = 0; i< toN; ++i)
ret *= a;
return ret;
}
double nth_root(double num, int N, double precision){
double x;
double dx;
double eps = precision;
double A = num;
double n = N;
x = A * 0.5;
dx = (A/dexp(x,n-1)-x)/n;
while(dx >= eps || dx <= -eps){
x = x + dx;
dx = (A/dexp(x,n-1)-x)/n;
}
return x;
}
int main()
{
int N = 4;
int A = 81.0;
double nthRootValue = nth_root(A, N, 10e-8);
printf("Nth root is %lf", nthRootValue);
return 0;
}
测试:
Nth root is 3.000000