1. 程式人生 > >【語言-彙編】自然常數(e)的計算

【語言-彙編】自然常數(e)的計算

原理介紹

它就是當時函式值的極限。即:

同時它也等於

計算結果

編譯平臺: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);
}