使用大整数进行高精度计算

仍然以求 ln(10)的值为例。为了算出 ln(10)的100小数,把所有数字放大10的100次方倍计算。


int main()
{
    
    
        big scaled_1(100000000);

        scaled_1 = scaled_1 * scaled_1 * scaled_1 * 10;
        scaled_1 *= scaled_1;
        scaled_1 *= scaled_1;

        big e;
        big p;
        big res;

        big sum = scaled_1;
        sum+= scaled_1;

        big m= scaled_1;
        m/=2;
        sum+= m;

        for( int i=3; i<=72; i++){
    
    
                if (m>=i) {
    
    
                        m = m/i;
                        sum+=m;
                }
        }
        e = sum;
        e.tostring(disp,512);
        printf("e=\n%s\n", disp);

        big scaled_10 = scaled_1 *10;

        big x = scaled_10;
        res = 0;
        while (x >e ) {
    
    
                x = x *scaled_1 /e;
                res += scaled_1;
        }

        p = scaled_1 /2;
        while (p >0 ){
    
    
                x *= x;
                x /= scaled_1;
                if ( x > e) {
    
    
                        x = x *scaled_1 /e;
                        res += p;
                }
                p/= 2;
        }
        res.tostring(disp,512);
        printf("ln(10)=\n%s\n", disp);
        return 0;
}
 

big是自定义的大整数数据类型。算得结果是,

e=
2,7182,8182,8459,0452,3536,0287,4713,5266,2497,7572,4709,3699,9595,7496,6967,627
7,2407,6630,3535,4759,4571,3821,7852,5166,4238
ln(10)=
2,3025,8509,2994,0456,8401,7991,4546,8436,4207,6011,0148,8628,7729,7603,3327,900
9,6757,2609,6773,5248,0235,9972,0508,9598,2966

猜你喜欢

转载自blog.csdn.net/aaasssdddd96/article/details/111905718