浮点数在内存中的存放格式例如以下:

地址        +0          +1           +2           +3
内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里
S 代表符号位,1是负,0是正
E 偏移127的幂。二进制阶码=(EEEEEEEE)-127。
M 24位的尾数保存在23位中,仅仅存储23位。最高位固定为1。此方法用最较少的位数实现了
较高的有效位数。提高了精度。 零是一个特定值,幂是0 尾数也是0。 浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值例如以下:
地址 +0 +1 +2 +3
内容0xC1 0x48 0x00 0x00 浮点数和十六进制等效保存值之间的转换相当简单。 以下的样例说明上面的值-12.5怎样转
换。 浮点保存值不是一个直接的格式。要转换为一个浮点数,位必须按上面的浮点数保存格式表
所列的那样分开。比如: 地址 +0 +1 +2 +3
格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二进制 11000001 01001000 00000000 00000000
十六进制 C1 48 00 00 从这个样例能够得到以下的信息:
符号位是1 表示一个负数
幂是二进制10000010或十进制130。130减去127是3。就是实际的幂。
尾数是后面的二进制数10010000000000000000000 在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中常常省略,加上一个1和小数
点到尾数的开头,得到尾数值例如以下:
1.10010000000000000000000 接着,依据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.由于
指数是3,尾数调整例如以下:
1100.10000000000000000000 结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂。比如:1100表示
(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。
小数点的右边也代表所处位置的2的幂,仅仅是幂是负的。比如:.100...表示(1*2^(-1))+
(0*2^(-2))+(0*2^(-2))...=0.5。 这些值的和是12.5。由于设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-
12.5。

FPGA流水线形式的浮点单元例如以下所看到的:

第一步:检測是否在异常区域(指数为零)。处在正常区则加入逻辑1到尾数的最高位(即把尾数的位变成24),否则加入零。

按此原理那么数据越大小数位的精度也就越低。

第二步:两个数中较小的数必须进行调整,使得尾数的指数相等。由于大数的小数位占的少,因此要舍去小数的尾数,使得数据之间指数对齐。即归一化,向右移两个指数的差值就可以。

第三步:符号检測并进行加减操作,然后在进行归一化处理。

可见浮点数的加减的硬件实现是非常复杂的。那么要想实现硬件乘法器,就更加复杂了。

最新文章

  1. 一口气从CSS讲到Servlet再到JSP、Struts2,清蒸JavaWeb的前前后后。
  2. Hadoop设置环境变量注意事项
  3. div加jquery实现iframe标签的功能
  4. TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
  5. String类概述
  6. Linux 静态库与共享库的使用
  7. SignalR 2.0 入门与提高
  8. Head First 设计模式 第6章 命令模式
  9. iOS开发注意事项(一)
  10. git使用随笔
  11. Oracle创建表空间创建用户和用户授权
  12. 洛谷P1047校门外的树题解
  13. MySQL 烂笔头 备份和还原
  14. CRM 2016 Get IOrganizationService
  15. 008、Docker 组件如何协作(2018-12-25 周二)
  16. Android 使用RecyclerView SnapHelper详解
  17. linearLayout 和 relativeLayout的属性区别(转)
  18. 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE
  19. python 普通文件读写
  20. 提高C++程序运行效率的10个简单方法

热门文章

  1. java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)
  2. [BZOJ1307][ZJOI2008]生日聚会PARTY
  3. 【DP】编辑距离
  4. android切换卡顿解决方法
  5. 证明,为什么HBase在创建表时,列簇是必须要,列可不要?
  6. 9 在C#控制台程序(console)中让用户输入
  7. 查看 Android App 的 versionCode
  8. Gradle sync failed: Could not find method android() for arguments 错误的解决办法
  9. js replace替换所有字符
  10. react-native 横向滚动的商品展示