找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2193|回复: 4
打印 上一主题 下一主题
收起左侧

关于浮点运算的一些问题

[复制链接]
跳转到指定楼层
楼主
ID:202691 发表于 2017-5-22 18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、浮点运算就是指整数运算和实数运算吧?  2、浮点运算在单片机中怎样进行的?  3、浮点寄存器是什么意思?自动匹配的工作寄存器组还是单片机内有专门的? 第一次发帖,希望大神门能帮我解答一下,谢谢啦
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2017-5-24 01:48 | 只看该作者
本帖最后由 yzwzfyz 于 2017-5-24 11:24 编辑

楼主所提的问题,主要是对浮点数在计算机中长成什么样了不清楚。
楼主应当知道科学计数法(除0之外)的示数方式:A.B*10^N,如:3.123456*10^8,A=1-9,B、N=任意数字。
计算机里的浮点数有许多种表示方式,但都是模仿了科学计数法。
现举其中在单片机中最常用的一种:
用四个字节表示一个浮点数:X1、X2、X3、X4
X1是指数相当于N,称“阶码”或指数;
X2X3X4构成底数相当于B。

符号:用底数的最高位来表示正负。
X2.7=1表示负数,X2.7=0表示正数。
如:(96H、C0H、23H、22H)中的C0H的最高位(C0H=11000000B)是1,所以是负数。
而:(96H、20H、23H、22H)中的20H的最高位(20H=00100000B)是0,则表示正数。

阶码:X1。

底数:X2X3X4的特殊规定:
无论X2.7是0是1,都默认为是1,也就是X2.7除表示符号之外,在底数中恒定认为是1。
如:(96H、C0H、23H、22H)中的底数是:C02322H
而(96H、20H、23H、22H)中的底数也是:C02322H(最高位20H=00100000B隐含是1,即为10100000B=C0H)

小数点在何处:阶码的最大值=FFH,最小为00H,就取其中值80H为小数点的位置,如此浮点数的值就为:
X2X3X4 * 2^(X1-80H-18H),注:18H=24是因为底数X2X3X4有24位。

浮点数举例:80000000H
底数:000000H,符号=0,正数,恢复隐含1之后为:800000H
阶码:80H
浮点数值=800000H * 2^(80H-80H-18H)=0.5

浮点数举例:80800000H
底数:800000H,符号=1,负数,恢复隐含1之后为:800000H
阶码:80H
浮点数值=-800000H * 2^(80H-80H-18H)=-0.5

浮点数举例:9803D600H
底数:03D600H,符号=0,正数,恢复隐含1之后为:83D600H
阶码:98H
浮点数值=83D600H * 2^(98H-80H-18H)=8640000
回复

使用道具 举报

板凳
ID:123289 发表于 2017-5-24 01:52 | 只看该作者
另一种浮点数表示方式:
符号用X1.7表求,而8位阶码的前7位是X1.6-X1.0,阶码的最后一位是X2.7。
底数X2X3X4的最高位仍恒默认=1。
回复

使用道具 举报

地板
ID:123289 发表于 2017-5-24 02:05 | 只看该作者
可见,浮点数的乘除还好,底数相乘除,阶码相加减。不过积商还要标准化,即必须保证底数最高位是1,否则就必须再对阶(左右移底数,并用减加阶码来补正)
而浮点数的加减法,就麻烦了,必须先对阶(对其中的一个数对阶,使其阶码与另一个数相同),即阶码必须相同,才能做加减。其和差也要做标准化。
可以浮点数的计算的复杂程度,是非浮点数的许多倍。
知道这些后,就应该尽可能不用浮点计算,以提高程序速度,并节省空间、节省CPU时间。
但浮点计算有范围广的特点!
回复

使用道具 举报

5#
ID:123289 发表于 2017-5-24 02:08 | 只看该作者
关于浮点数的存放,爱放哪放哪。
所以楼主所提的:“浮点寄存器”、“工作寄存器组”等,是没有意义的说法。
如果你将浮点数放在“大门”,就叫“大门浮点数”好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表