正文

整理我以前的PASCAL源程序-高精度计算(2)计算自然对数底e2010-08-19 22:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jtchang/51680.html

分享到:

  算自然对数底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.

阅读(1909) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册