整理我以前的PASCAL源程序-高精度计算(2)计算自然对数底e

算自然对数底e,比起算圆周率甚至还要简单。直接利用e的级数算就行。下面的程序算到e的小数点后一万位。

program se;
label ext;
const
     dn=2504;
var
    n,i,ip,k:integer;
    sum,a:array[1..dn] of integer;

procedure testk;
var
   ch:char;
begin
     if k mod 10=0 then write(' ');
     if (k mod 50=0) and (k mod 1000<>0) then
              writeln(':',k:8);
     if k mod 1000<>0 then exit;
     writeln(':',k:8,'  Press Enter..');
     readln;
end;

procedure outp;
var
  i:integer;
begin
   writeln('e=');
   writeln(sum[1],'.');
   k:=0;
   for i:=2 to dn do
      begin
          write(sum[i] div 1000);  k:=k+1; testk;
          write(sum[i] div 100 mod 10); k:=k+1; testk;
          write(sum[i] div 10 mod 10 ); k:=k+1; testk;
          write(sum[i] mod 10);  k:=k+1; testk;
      end;
   writeln;
   writeln('Programmed by j.t.chang');
end;

procedure formats;
var
   c:integer;
begin
     c:=0;
    for i:=dn downto 1 do
      begin
           sum[i]:=sum[i]+c;
           c:=sum[i] div 10000;
           sum[i]:=sum[i] mod 10000;
      end;
end;
procedure m_div;
var
   i:integer;
   r1,c:longint;
begin
   c:=0;
   for i:=ip to dn do
      begin
         r1:=c*10000+a[i];
         a[i]:=r1 div n;
         sum[i]:=sum[i]+a[i];
         c:=r1 mod n;
      end;
end;

begin
    writeln('Please wait...');
    for i:=1 to dn do a[i]:=0;
    a[1]:=1;
    sum:=a;
    n:=1;
    ip:=1;
    repeat
       i:=ip;
       while (a[i]=0) do
         begin
            i:=i+1;
            if i>dn then goto ext;
         end;
        ip:=i;
        m_div;
        n:=n+1;
        formats;
    until false;
ext:
    formats;
    outp;
end.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值