高精度 四位压缩

Posted geraldg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度 四位压缩相关的知识,希望对你有一定的参考价值。

高精度 四位压缩 

基本原理: 建立一个数组 每一位上存4位数字 运用一定的方法运算,以实现大整数的运算;

 

封装在了结构体内;

目前只有高精度+高精度、高精度*单精度、max(高精度,高精度);

代码:

//高精度四位压缩================================================
const int M=85,mod=10000;
struct HP {
    int p[505],len;
    HP() {
        memset(p,0,sizeof(p));
        len=0;
    }//初始化一个高精度变量
    void put_out() { //输出
        printf("%d",p[len]);
        for(int i=len-1; i>0; i--) {
            if(p[i]==0) {
                printf("0000");
                continue;
            }
            for(int k=10; k*p[i]<mod; k*=10)printf("0");
            printf("%d",p[i]);

        }
    }
} f[M][M],base[M],ans;
//高精+高精 O(len)
HP operator + (const HP &a,const HP &b) {
    HP c;
    c.len=max(a.len,b.len);
    int x=0;
    for(int i=1; i<=c.len; i++) {
        c.p[i]=a.p[i]+b.p[i]+x;
        x=c.p[i]/mod;
        c.p[i]%=mod;
    }
    if(x>0)c.p[++c.len]=x;
    return c;
}
//高精*单精 O(len)
HP operator * (const HP &a,const int &b) {
    HP c;
    c.len=a.len;
    int x=0;
    for(int i=1; i<=c.len; i++) {
        c.p[i]=a.p[i]*b+x;
        x=c.p[i]/mod;
        c.p[i]%=mod;
    }
    while(x>0) {
        c.p[++c.len]=x%mod;
        x/=mod;
    }
    return c;
}
//max 高精
HP max (const HP &a,const HP &b) {
    if(a.len>b.len)
        return a;
    if(a.len<b.len)
        return b;
    for(int i=a.len; i>0; i--) {
        if(a.p[i]>b.p[i])
            return a;
        if(a.p[i]<b.p[i])
            return b;
    }
    return a;
}
//================================================

 

以上是关于高精度 四位压缩的主要内容,如果未能解决你的问题,请参考以下文章

GLSL-片段着色器不同部分的精度不同

PHP 精度计算引发的灾难性Bug

格式化一个大的double以显示四位有效数字

我想在使用 DecimalFormat 时保留尾随零

1049 数列的片段和(注意精度!!)

精度无损,体积压缩70%以上,百度PaddleSlim为你的模型瘦身