【语言-汇编】自然常数(e)的计算

原理介绍

 

 

它就是当 x\to \infty 时函数 f \left ( x \right ) = \left ({ 1 + \frac{1}{x} }\right )^{x} 值的极限。即: e= \lim_{x\to \infty}{\left ( {1+\frac{1}{x}} \right )}^{x}

同时它也等于 \frac{1}{0!} + \frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + \frac{1}{4!} + \frac{1}{5!} + \cdots

 

计算结果

编译平台:Microsoft Visual Studio 2010

 

项目:Win32项目-空项目

CPU:Intel(R) Core(TM)I7-3770

内存:3.48 GB

计算位数:10万

总用时:11秒473毫秒

 

计算源码

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#include <atltime.h>
long a=100000L;

void main()
{ 
	FILE *fp;
	unsigned long c,d,e,i,j,ws;
	long *f,*bb;
	printf("请输入您要计算的位数:");
	scanf("%ld",&ws);
	if(ws<1)return;
	c=(ws+4)/05*05;
	bb=f=(long*)malloc(04*c);
	if(f==NULL)abort();

	char filename[40];
	printf("请输入您保存的路径: ");//提示输入数据文件名
	scanf("%s",filename);//若打入NUL,则不存盘
	fp=fopen(filename,"w");
	if(fp==NULL)
	{
		fp=fopen("pi.txt","w");
		if (fp==NULL)
		{
			printf("打开文件e.txt失败!");//提示输入数据文件名
		}
		else
		{
			printf("您默认保存的为文件名称为e.txt!");
		}
	}
	long t1=GetTickCount();

	*bb++=a/5;
	for(i=1;i<c-1;i++)
		*bb++=a/10;
	*bb=a/10;
	for(e=0;c;c-=05,bb-=05,e=d%a)
	{ 
		static long group;
		d=0;i=1;j=c;
		_asm mov eDI,bb
loopi:
		_asm mov eax,[eDI]
		_asm mul Dword ptr a
		_asm mov ecx,edx
		_asm mov ebx,eax
		_asm mov eax,d
		_asm mul dword ptr i
		_asm add eax,ebx
		_asm adc edx,ecx
		_asm div dword ptr j
		_asm mov d,eax
		_asm mov [eDI],edx
		_asm sub eDI,04
		_asm dec dword ptr j
		_asm jnz loopi
		printf("%05lu\t",e+d/a);
		if(fp!=NULL)
		fprintf(fp,"%05lu",e+d/a);//写入磁盘
	}

	long t2=GetTickCount();
	printf("%ld毫秒\n",t2-t1);

	free(f);
	if(fp!=NULL)
	fclose(fp);
}


 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值