仍然以求 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