首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C GMP非整数幂

C GMP非整数幂
EN

Stack Overflow用户
提问于 2018-03-15 02:27:39
回答 1查看 147关注 0票数 1

我使用的是C库,我正在尝试计算一个mpf_t类型的浮点数,它的幂是1.0 /n,其中n是一个整数。然而,这种类型的幂函数似乎只接受幂的整数输入。在这个库中有没有一个函数可以以双倍的形式做幂,如果没有,有没有我可以使用的快速算法?

EN

回答 1

Stack Overflow用户

发布于 2018-03-15 07:25:48

在这个库中有一个函数,它可以用

的形式做幂运算,

不是的。

,如果不是,有没有快速的算法我可以使用呢?

是。

1.0/n赋权的xx的平方根n相同。有一种有效的算法可以计算该值请参阅:nth root algorithm - Wikipedia

这是工作的C代码,你可以很容易地适应GMP。

功能:

代码语言:javascript
运行
复制
void mpf_pow_ui (mpf_t rop, const mpf_t op1, unsigned long int op2);

  • set rop to op1提升到幂op2,可以用来代替dexp.

代码语言:javascript
运行
复制
#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;
}

测试:

代码语言:javascript
运行
复制
Nth root is 3.000000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49285214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档