浮点运算就是实数运算,因为计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。

大多数机器都是32位的,也就是说32位都用来表示整数的话,那么对于无符号整数就是0 到 2^32-1,对于有符号的话就是-2^31 到 2^31-1。

中文名

浮点运算

外文名

floating point arithmetic性    质

实数运算

原    因

计算机只能存储整数

特    点

实数都是约数

浮点运算基本特征

编辑

语音

当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。这都是浮点运算能力的差异导致的。

如果是实数的话,就不是这样了,机器有两种办法表示实数,一种是定点,就是小数点位置是固定的,一种是浮点,就是小数点位置不固定,计算方法也比较麻烦,通常会比整数运算代价大很多。

FPU->Floating Point Unit,浮点运算部件。

BCD->Binary Coded Decimal 压缩的二进制数,是用4个位来表示数字0~9,一个byte表示两个十进制数,比如正常二进制数1001111表示79,而BCD中用 0111 1001 来表示79。

科学计数法:a×10的n次幂的形式。将一个数字表示成 (a×10的n次幂的形式),其中1≤|a|<10,n表示整数,这种记数方法叫科学记数法。

浮点运算数据

编辑

语音

浮点运算使用三种不同的数据:

1)整数(Integer),又分为字,短整数(Short Integer)和长整数(longint)。

2)实数(Real)分单精度(Single Real)和双精度(Double Real)。

3)压缩的二十进制数(BCD)。

下面是其位数(bits)和能表示的大致范围和

Type Length Range

-----------------------------------------------

Word Integer 16 bit -32768 to 32767[1]

Short Integer 32 bit -2.14e9 to 2.14e9

Long Integer 64 bit -9.22e18 to 9.22e18

Single Real 32 bit 1.18e-38 to 3.40e38

Double Real 64 bit 2.23e-308 to 1.79e308

extended Real 80 bit 3.37e-4932 to 1.18e4932

Packed BCD 80 bit -1e18 to 1e18

双精度数和扩展精度数表示范围对一般应用来说已经足够大了!

浮点运算整数

以补码形式存储,正数的补码是其本身,负数补码是其绝对值的各位变反后加1,下面是实际存储的例子:

0024 var1 dw 24

FFFE var2 dw -2

000004D2 var3 dd 1234

FFFFFF85 var4 dd -123

0000000000002694var5 dq 9876

浮点运算BCD数

在FPU中用80位表示正好是浮点堆寄存器的宽度,在其格式如下存储:

Bit

79___72_71________________________________________0

符号 ---18个二十进制数——————————---

看下面的例子:

00000000000000012345 var1 dt 12345

80000000000000000100 var2 dt -100

浮点运算浮点数

这个复杂点,有三种格式

单精度:_31_30________23_22___________0

符号 指数 有效数。

双精度:_63_62__________52_51__________________0

符号 指数 有效数。

扩展精度数:

_79_78____________64_63___________________0

符号 指数 有效数。

浮点运算部件

编辑

语音

FPU从功能上分为两个部分:控制单元和运算单元,控制单元主要面向CPU,而算数单元负责具体算数运算.

FPU即浮点部件包括8个通用寄存器,5个错误指针寄存器和三个控制寄存器。

1、8个通用寄存器每个80 bit,形成一个寄存器堆栈,所有的计算结果都保存在寄存器堆栈中,其中数据全部是80位的扩展精度格式,即使是BCD,整数,单精度和双精度等在装入寄存器的时候都要被FPU自动转化为80位的扩展精度格式,注意栈顶通常表示为ST(0),然后是ST(1)...ST(i),ST(i)是相对于栈顶而言的。

和堆栈很相似,只不过宽度为80bit,映像如下:

_______________________

| ST(0) |

|_______________________|

| ST(1) |

|_______________________|

| ...... |

| ...... |

| ST(i) |

|_______________________|

2、控制寄存器,FPU有三个控制寄存器:状态寄存器,控制寄存器和标记寄存器。

状态寄存器->SW

_M_____D________10___9____8___7_________5_________________________0__

| B | C3| TOP| C2 | C1 | C0 | ES | | PE | UE | OE | ZE | DE | IE |

|____|____|____|____|____|____|____|____|____|____|____|____|____|____|

B: 浮点部件正忙。

C0-C3 指示浮点运算的结果,不同指令有不同含义。

TOP 指示栈顶,通常是0。

ES 以下任何位置位 (pe,ue,oe,ze,de,or ie) 则置位。

PE 精度故障。

UE 数字太小无法表示溢出。

OE 现有精度无法表示,数字太大溢出。

ZE 除0错。

DE 指示至少有一个操作数未规格化。

IE 无效错误,指示堆栈上溢或下溢,无效操作数等。

_15____________10___9____8___7_________5______________________0__

| |IC | RC | PC | | PM | UM | OM | ZM | DM | IM |

|____|____|____|___|__|_|__|__|____|____|____|____|____|____|____|

IC 无穷大控制,对486,已经无效。

RC 舍入控制。

00 = 朝最接近或者偶数舍入。

01 = 朝负无穷大方向舍入。

10 = 朝正无穷大方向舍入。

11 = 超0方向截断。

PC 精度控制。

00 = 单精度。

01 = 保留。

10 = 双精度。

11 = 扩展精度。

PM~IM 屏蔽状态寄存器低5位指示的错误.为1则屏蔽。

标记寄存器:

每2 bit表示一个对应[2]

堆栈寄存器的状态,具体含义如下:

15________________________________________3_____0

|Tag7 |...................................|tag1|

|_____|___________________________________|____|

含义:

00 = 有效。

01 = 零。

10 = 无效或无穷大。

11 = 为空。

浮点运算格式

编辑

语音

单精度:_31_30________23_22___________0

符号 指数 有效数。

双精度:_63_62__________52_51__________________0

符号 指数 有效数。

扩展精度数: _79_78____________64_63___________________0

符号 指数 有效数。

例子:

C377999A var1 dd -247.6

40000000 var2 dd 2.0

486F4200 var3 real4 2.45e+5

4059100000000000 var4 dq 100.25

3F543BF727136A40 var5 real8 0.00123

C377999A var1 dd -247.6

40000000 var2 dd 2.0

486F4200 var3 real4 2.45e+5

4059100000000000 var4 dq 100.25

3F543BF727136A40 var5 real8 0.001235

400487F34D6A161E4F76 var6 real10 33.9876

DD和real4都可以在asm中来定义单精度浮点数,4 bytes

DQ和real8都可以在asm中来定义[3]

双精度浮点数,8 bytes

DT和real10都可以在asm中来定义扩展精度浮点数,10 bytes

浮点运算指令系统分类

编辑

语音

浮点指令系统分为五类:数据传送类、算术运算类、超越函数类、比较类、环境及系统控制类。

我并不想列出所有函数的参数以及用法,具体参考资料见文章最后。

1、数据传送类

这类指令主要是从内存装入浮点寄存器堆数据,一般目的地址总是栈顶ST(0),用调试器你可以清楚地看到这一点.注意带P结尾的操作,是在前面操作完成之后[4]

出栈,也就是原来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

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

如果指令后面未带[5]

操作数,其默认的操作数为ST(0)和ST(1),关于带R后缀的指令是正常操作数的顺序变反,比如fsub执行的是x-y,fsubr执行的就是y-x。

3、超越函数类

三角函数

FSIN Calculate sine

FCOS Calculate cosine

FSINCOS Calculate quick sine and cosine

FPTAN Calculate partial tangent

FPATAN Calculate partial arctangent

Log类

FYL2X Calculate y times log base 2 of x

FYL2XP1 Calculate y times log base 2 of (x+1)

F2XM1 Calculate (2^x)-1

4、比较类

FCOM Compare

FCOMP Compare and pop

FICOM Integer compare

FTST Integer compare and pop

FUCOM Unordered compare

FUCOMP Unordered compare and pop

FXAM Set condition code bits for value at top of stack

FSTSW Store status word

会根据结果设置,C0~C3,在上面并未就C0~C3进行具体介绍,C1是用来判断上溢或者下溢的,C0相当于EFLAGS里面的CF,作用也基本一致,C2相当于PF,C3相当于ZF,可能会看到如下指令:

FSTSW ax

SAHF

JZ label

为什么如此呢,因为用如上指令将状态字存入EFLAGS,C0正好置于CF位,C3正好置于ZF位.

5、环境及系统控制类

FLDCW Load control word

FSTCW Store control word

FSTSW Store status word

FLDENV Load environment block

FSTENV Store environment block

FSAVE Save coprocessor state

FRSTOR Restore coprocessor state

FINIT Initialize coprocessor

FCLEX Clear exception flags

FINCSTP Increment stack pointer

FDECSTP Decrement stack pointer

FFREE Mark element as free

FNOP No operation

FWAIT Wait until floating-point instruction complete

浮点运算例子

编辑

语音

计算机里整数和小数形式就是按普通格式进行存储,例如1024、3.1415926等等,这个没什么特点,但是这样的数精度不高,表达也不够全面,为了能够有一种数的通用表示法,就发明了浮点数。

浮点数的表示形式有点像科学计数法(*.*****×10^***),它的表示形式是0.*****×10^***,在计算机中的形式为 .***** e ±***),其中前面的星号代表定点小数,也就是整数部分为0的纯小数,后面的指数部分是定点整数。利用这样的形式就能表示出任意一个整数和小数,例如1024就能表示成0.1024×10^4,也就是 .1024e+004,3.1415926就能表示成0.31415926×10^1,也就是 .31415926e+001,这就是浮点数。浮点数进行的运算就是浮点运算。

浮点运算比常规运算更复杂,因此计算机进行浮点运算速度要比进行常规运算慢得多。

浮点运算其他

编辑

语音

另外,[6]

浮点运算的常见形式是开方运算。目前所有的计算机使用的都是浮点运算,普通人的电脑也用的是浮点运算。

词条图册

更多图册

参考资料

1.

邱富杭,曾健民编著. C语言程序设计学习指导 第2版[M]. 北京:中国铁道出版社, 2013:3

3.

DCS系统不兼容双精度浮点数问题研究与处理

.中国知网[引用日期2017-04-03]

4.

出栈序列的性质及其求解新算法

.知网[引用日期2017-04-03]

5.

浮点乘加部件中三操作数前导1预测算法的设计

.知网[引用日期2017-04-03]

浮点运算计算机在线,浮点运算相关推荐

  1. 浮点运算计算机在线,双浮点运算计算器

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 双字换算计算机 双浮点运算计算器 初始数值: 双字数值: var button = window.document.getElementById(&quo ...

  2. 浮点数运算计算机在线,双浮点运算计算器

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 双字换算计算机 双浮点运算计算器 初始数值: 双字数值: var button = window.document.getElementById(&quo ...

  3. 大物计算机在线使用,计算机怎么发展为电脑的

    [专家解说]: 电脑 英文:computer 用电子等部件模拟的具有运算能力的物体,学名计算机. 最初由约翰·冯·诺依曼发明(那时电脑的计算能力相当于现在的计算器),有三间库房那么大,后逐步发展而成. ...

  4. 大学计算机在线作业答案,上海交通大学《计算机》在线作业二参考答案

    <上海交通大学<计算机>在线作业二参考答案>由会员分享,可在线阅读,更多相关<上海交通大学<计算机>在线作业二参考答案(13页珍藏版)>请在人人文库网上 ...

  5. 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技 ...

  6. 计算机在线作业4,计算机在线作业4

    计算机在线作业4 公 告: 在线作业答案‎提示 -> 计算机应用基‎础 作业题目列表‎ 单选 1.Excel中‎的电子工作表‎具有____‎. A. 一维结构 B. 二维结构 C. 三维结构 D ...

  7. 计算机在线测定bz讨论,计算机在线考试系统项目总结.doc

    . .. 附件: 总结 计算机在线考试系统项目 随着计算机信息技术.网络技术和软件技术的不断发展和完善,促进了人们很多传统的工作手段和方法也随之改变."在线考试系统"就是利用计算机 ...

  8. 计算机组成原理——浮点运算

    一.浮点数加减运算 在计算机中,浮点数遵循补码运算 浮点数表示:两位尾符,尾数:两位阶符,阶数1) 对阶1.求阶差△j = jx - jy2.小阶向大阶看齐若 △j < 0,则 x 向 y 看齐 ...

  9. 计算机组成原理 浮点运算和浮点运算器 练习题

    一.选择题 1.关于浮点数加减法以下论述正确的是( ) . A.对阶时较小的数进行左移 B.对阶时小阶向大阶对齐 C.对阶时大阶向小阶对齐 D.对阶时较大的数进行左移 正确答案:B 2.浮点数进行左规 ...

最新文章

  1. 1.随机函数,计算机运行的基石
  2. 内推 58 人拿到微软 offer!这位大佬有多强?
  3. 教你两种python selenium保存图片的方法
  4. 在linux系统使用nginx部署静态网页
  5. Win64 驱动内核编程-14.回调监控文件
  6. python根据文件名获取文件路径_python 查看文件名和文件路径
  7. jenkins构建触发器定时任务
  8. VSCode 插件开发实例(WebView):微信读书 ^-^边撸代码边看小说^-^
  9. axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题
  10. link rel=canonical 用法
  11. swift之Mac中NSView视图里的截图【ScrollView中的内容截图】
  12. python 命令行 模块_深入浅析Python 命令行模块 Click
  13. discuz 服务器维护,论坛服务器经常宕机 - Discuz!-安装使用 - Discuz! 官方站 - Powered by Discuz!...
  14. 30年前的中专相当于现在什么学历?比现在一本厉害吗?
  15. C++学习笔记(达内视频版)
  16. 捷信达酒店管理系统使用说明-前言
  17. SharePoint开发环境配置
  18. matlab 隐函数求偏导数,隐函数求偏导数的方法.PDF
  19. 数字化觉醒时代:传统企业云原生技术体系建设之路(一)
  20. (加入显示电量功能)模仿魅族、华为、小米电池续航管理软件, 动态水波纹滚动的圆形小球View

热门文章

  1. ClickHouse安装部署流程(tgz版)
  2. 常见的几种HTTP状态码
  3. C#调用JS的几种方法
  4. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结
  5. Enemy源码简单分析
  6. 三级嵌入式准备(四)
  7. 51单片机蓄电池充电保护设计Proteus仿真
  8. 高并发、多线程、分布式都不懂,你拿什么跳槽阿里、腾讯、京东?
  9. 如果基督山伯爵上了起点网……
  10. php basename() 绕过,【转】PHP里的basename函数不支持中文名的解决