我使用的是C库,我正在尝试计算一个mpf_t类型的浮点数,它的幂是1.0 /n,其中n是一个整数。然而,这种类型的幂函数似乎只接受幂的整数输入。在这个库中有没有一个函数可以以双倍的形式做幂,如果没有,有没有我可以使用的快速算法?
发布于 2018-03-15 07:25:48
在这个库中有一个函数,它可以用
的形式做幂运算,
不是的。
,如果不是,有没有快速的算法我可以使用呢?
是。
为1.0/n赋权的x与x的平方根n相同。有一种有效的算法可以计算该值请参阅:nth root algorithm - Wikipedia
这是工作的C代码,你可以很容易地适应GMP。
功能:
void mpf_pow_ui (mpf_t rop, const mpf_t op1, unsigned long int op2);rop to 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.000000https://stackoverflow.com/questions/49285214
复制相似问题