


原帖由 nom-soccery 于 2008-10-15 10:44 发表
Ramanujan公式
1914年,印度数学家Srinivasa Ramanujan在他的论文里发表了一系列共14条圆周率的计算公式,这是其中之一。这个 ...
原帖由 weiliu86 于 2008-10-15 22:28 发表
附件里有个程序,同SUPER PI采用的是同一计算方法,你们懂C语言的自己看吧:
下面补充一下SUPER PI的知识(转):
不可否认,SuperPi历史非常悠久,用的人之多,其他同类软件难以匹敌。但是对其有更多了解的人却 ...
原帖由 weiliu86 于 2008-10-15 22:28 发表
附件里有个程序,同SUPER PI采用的是同一计算方法,你们懂C语言的自己看吧:
下面补充一下SUPER PI的知识(转):
不可否认,SuperPi历史非常悠久,用的人之多,其他同类软件难以匹敌。但是对其有更多了解的人却 ...
原帖由 bessel 于 2008-10-19 19:06 发表
怎么算pi,初看起来小数么,要用浮点,
考虑到精度,小数点后的位数,人们觉得应该用整数,
再想想就会明白还是要用浮点,
再想想。{titter:]
原帖由 weiliu86 于 2008-10-15 22:28 发表
附件里有个程序,同SUPER PI采用的是同一计算方法,你们懂C语言的自己看吧:
下面补充一下SUPER PI的知识(转):
不可否认,SuperPi历史非常悠久,用的人之多,其他同类软件难以匹敌。但是对其有更多了解的人却 ...
原帖由 acqwer 于 2008-11-12 12:42 发表
http://topic.csdn.net/t/20060328/11/4644901.html
我说,上面那些高人们都不考虑那些大数不管是做加减还要乘、除和开方的吗?
原帖由 tomsmith123 于 2008-11-12 20:25 发表
http://myownlittleworld.com/miscellaneous/computers/piprogram.html
注意看,基本上是整数运算。
原帖由 bessel 于 2008-11-13 02:12 发表
Number of Floating Point Operations:
pi_fftcs.c + fftsg_h.c:
42*nfft*(log_2(nfft))^2 [Operations]
(三)浮点指令系统及MASM下浮点程序设计
事实上最重要和比较难于找到资料在(一)和(二)部分中已经介绍,下面是为了完整性的考虑,如果你是第一次接触浮点指令,看看下面的摘要也无妨.另外本文未涉及到的一个方面是关于浮点处理异常的情况,因为涉及到保护模式和中断、任务切换以及SEH等较多内容,我相信介绍之后只会令人更加迷惑,况且我现在似乎也无法把这几个问题完全说清除,一般我们几乎不需要知道这些.让我们先来看主要内容.
关于浮点程序设计是一个大的话题,我只是提纲挈领地简述Masm32V7(/V6)中的设计方法,因为486以上的CPU内建了浮点部件所以可以在程序里直接使用浮点指令.下面是一个小例子:
__MASMSTD equ 1
.386p
.model flat, stdcall
option casemap :none ; case sensitive
include c:hdhd.h
include c:hdmac.h
;;--------------
.DATA
num1 dq 12345
num2 dq 98765
res dd 0
.DATA?
buf db 200 dup(?)
;;-----------------------------------------
.CODE
__Start:
finit ;初始化浮点部件
fild num1 ;装入num1
fild num2 ;装入num2
fmul ;执行乘法
fist res ;存储
invoke wsprintf,addr buf,CTEXT("the result is: %ld"),res
invoke StdOut,addr buf ;显示,注意是控制台显示,编译用/SUBSYSTEM:CONSOLE
invoke StdIn,addr buf,20
invoke ExitProcess,0
END __Start
具体你要怎样运用指令,那就得看你自己所要进行的操作和要执行的算法了.注意在fpu内部寄存器总是以扩展精度数来表示数值的,因此进行整数运算最后要用fist来存储,这样才能得到正确的结果,这些转换是由fpu自动完成的.
浮点指令系统分为五类:数据传送类、算术运算类、超越函数类、比较类、环境及系统控制类.
我并不想列出所有函数的参数以及用法,因为这会是劳动力的浪费.我打字用拼音的!:D)具体参考资料见文章最后,别的我就帮不上你了.
1)数据传送类,主要包括
这类指令主要是从内存装入浮点寄存器堆数据,一般目的地址总是栈顶ST(0),用调试器你可以清除的看到这一点.注意带P结尾的操作,是在前面操作完成之后出栈,也就是原来ST(1)的内容现在成了ST(0)的内容,注意到这一点,你可以方便地设计出灵活多变的程序.
装入:
FLD Push real onto stack
FILD Convert two's complement integer to real and push
FBLD Convert BCD to real and push to stack
存储:
FST Store floating-point number from stack
FSTP Convert top of stack to integer
FIST
FISTP Convert top of stack to integer
FBSTP Store BCD to integer and pop stack
交换:
FXCH Exchange top two stack elements
常数装载:
FLD1 装入常数1.0
FLDZ 装入常数0.0
FLDPI 装入常数pi (=3.1415926....精度足够,放心使用)
FLDL2E 装入常数log(2)e
FLDL2T 装入常数log(2)10
FLDLG2 装入常数log(10)2
FLDLN2 装入常数Log(e)2
我逼并不想列出所有的浮点指令的详细格式,因为没有必要!很多资料都有这些指令格式的介绍,浮点指令均以F开头,LD表示Load,ILD表示整数的Load,BLD是二十进制数的Load,这样记起来就很容易了,很多指令功能都可以根据指令一眼看出来.
2)算术运算类
加法:
FADD/FADDP Add/add and pop
FIADD Integer add
减法:
FSUB/FSUBP Subtract/subtract and pop
FSUBR/FSUBRP Subtract/subtract and pop with reversed operands
FISUB Integer subtract
FISUBR Integer subtract/subtract with reversed operands
乘法:
FMUL/FMULP Multiply/multiply and pop
FIMUL Integer multiply
除法:
FDIV/FDIVP Divide/divide and pop
FIDIV Integer divide
FDIVR/FDIVRP Divide/divide and pop with reversed operands
FIDIVR integer divide with reversed operands
其他:
FABS Calculate absolute value
FCHS Change sign
FRNDINT Round to integer
FSQRT Calculate square root
FSCALE Scale top of stack by power of 2
FXTRACT Separate exponent and mantissa
FPREM Calculate partial remainder
FPREM1 Calculate partial remainder in IEEE format
如果指令后面未带操作数,其默认的操作数为ST(0)和ST(1),关于带R后缀的指令是正常操作数的顺序变反,比如fsub执行的是x-y,fsubr执行的就是y-x.

原帖由 caodick 于 2008-11-16 16:59 发表
2.全新的整数与浮点单元
从P6到NetBurst架构,整数与浮点单元的变化还是相当明显,不过如今Core架构的变化也同样不小,只是部分关键技术又改回P6架构时代的设计。Core具备了3个64bit的整数执行单元,每一个都 ...
原帖由 azure911 于 2008-11-16 22:00 发表
6.Pentium 66MHz计算104万位需要 1小时13分22秒
HITAC S-3800/480计算104万位大约只需要5秒!
===========================
95年的机器啊,现在的民用cpu能有这个5秒吗?
| 欢迎光临 POPPUR爱换 (https://we.poppur.com/) | Powered by Discuz! X3.4 |