已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
您的位置 首页 单片机技术 单片机编程 正文 上篇 C51写的93C46的读写程序 下篇 Freescale GP32监控程序1 浮点数显示浮点数显示 提供浮点数显示格式的说明提供浮点数显示格式的说明 C51 里用 4 字节存储一个浮点数 格式遵循 IEEE 754 标准 详见 c51 pdf 第 179 页说明 一个浮点数用两个部分表示 尾数和 2 的幂 尾数代表浮点上的实际二进制数 2 的幂代 表指数 指数的保存形式是一个 0 到 255 的 8 位值 指数的实际值是保存值 0 到 255 减去 127 一个范围在 127 到 128 之间的值 尾数是一个 24 位值 代表大约 7 个十进制数 最高 位 MSB 通常是 1 因此不保存 一个符号位表示浮点数是正或负 浮点数保存的字节格式如下 地址 0 1 2 3 内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符盼唬 是负 0 是正 E 偏移 127 的幂 二进制阶码 EEEEEEEE 127 M 24 位的尾数保存在 23 位中 只存储 23 位 最高位固定为 1 此方法用最较少的位数实 现了较高的有效位数 提高了精度 零是一个特定值 幂是 0 尾数也是 0 浮点数 12 5 作为一个十六进制数 0 xC1480000 保存在存储区中 这个值如下 地址 0 1 2 3 内容 0 xC1 0 x48 0 x00 0 x00 浮点数和十六进制等效保存值之间的转换相当简单 下面的例子说明上面的值 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 因为设置的符号位表示这数是负的 因此十六进制值 0 xC1480000 表 示 12 5 浮点数错误信息 8051 没有包含捕获浮点数错误的中断向量 因此 你的软件必须正确响应这些错误情况 除了正常的浮点数值 还包含二进制错误值 这些值被定义为 IEEE 标准的一部分并用在 正常浮点数操作过程中发生错误的时候 你的代码应该在每一次浮点操作完成后检查可能 出现的错误 名称 值 含义 NaN 0 xFFFFFFF 不是一个数 INF 0 x7F80000 正无穷 正溢出 INF 0 xFF80000 负无穷 负溢出 你可以使用如下的联合体 union 存储浮点数 union f float f 浮点值 unsigned long ul 无符号长整数 这个 union 包含一个 float 和一个 unsigned long 以便执行浮点数学运算并响应 IEEE 错误状 态 以上是 KEIL 在线帮助的中译文 下面我们讨论如何显示浮点数 尾数为 24bit 最高可表达的整数值为 2 24 1 16777215 也就是说 小于等于 16777215 的 整数可以被精确显示 这决定了十进制浮点数的有效位数为 7 位 10 7 16777215 10 8 10 的 7 次方以内的数小于 16777215 可以精确表示 使用科学记 数法时 整数部分占 1 位 所以小数部分最大占 7 1 6 位 即最大有 6 位十进制精度 长 整形数和浮点数都占 4 字节 但表示范围差别很大 浮点数的范围为 1 175494E 38 到 3 402823E 38 无符号长整形数范围为 0 到 4294967295 显示浮点数要用到长整形数保存 数据 可他们范围差这么多 怎么办呢 仔细观察十进制浮点数的显示 有一个尾数和一个阶码 由上面论证可知 32 位 IEEE 754 浮点数最大有效数字为 7 位十进制数 超出此范围的数字有截断误差 不必理会 因此 浮点数尾数能够放在长整形数里保存 阶码为 38 到 38 一个 char 型变量就可以保存 综上所述 以 10 7 的最大跨度为窗口 小于 10 7 也可以 如 10 100 10000 等 但决不 能大于它 那样会超出精度范围 定位浮点数的量级 然后取出 7 位尾数的整数值存于长 整形数里 再调整阶码 就可以精确显示此浮点数 量级尺度如下 38 35 28 21 14 7 0 7 14 21 28 35 38 请严格按照 KEIL 手册给出的浮点数范围显示 因为数值空间没有完全使用 有些值用于 错误指示和表示正负无穷 小于 1 175494E 38 的数仍可以显示一些 但最好不用 以免出 错 我采用直接判断的方法 剔除此种情况 在计算机里结合律不成立 a b c a b c 原则是先让计算结果值动态范围小的两个数 运算 请注意程序里的写法 注 1E38 b 1E6 不要写成 1E44 b 因为无法在 32 位浮点数里保存 1E44 切记 计算机使用二进制数计算 能有效利用电子器件高速开关的特性 而人习惯于十进制数表 示 二进制和十进制没有方便的转换方法 只能通过大量计算实现 浮点数的十进制科学 记数法显示尤其需要大量的运算 可见 显示一个浮点数要经过若干次浮点运算 没有必 要就不要显示 否则 花在显示上的时间比计算的耗时都要多得多 源程序 void DispF float f reentrant 用科学记数法显示浮点数 在 float 全范围内精确显示 超出范 围给出提示 1 175494E 38 到 3 402823E 38 float tf b unsigned long w tw char i j if f 0 PrintChar f 1 0 f if f1E35 f 10 35 tf f 1E35 b 1000 0 for i 0 j 38 i 4 i j if tf b1E28 10 28 f 10 35 tf f 1E28 b 1E7 for i 0 j 35 i 8 i j if tf b1E21 10 21 f 10 28 tf f 1E21 b 1E7 for i 0 j 28 i 8 i j if tf b1E14 10 14 f 10 21 tf f 1E14 b 1E7 for i 0 j 21 i 8 i j if tf b1E7 10 7 f 10 14 tf f 1E7 b 1E7 for i 0 j 14 i 8 i j if tf b1 1 f 10 7 tf f b 1E7 for i 0 j 7 i 8 i j if tf b1E 7 10 7 f 1 tf f 1E7 b 1E7 for i 0 j 0 i 8 i j if tf b1E 14 10 14 f 10 7 tf f 1E14 b 1E7 for i 0 j 7 i 8 i j if tf b1E 21 10 21 f 10 14 tf f 1E21 b 1E7 for i 0 j 14 i 8 i j if tf b1E 28 10 28 f 10 21 tf f 1E28 b 1E7 for i 0 j 21 i 8 i j if tf b1E 35 10 35 f 10 28 tf f 1E35 b 1E7 for i 0 j 28 i 8 i j if tf b 1 b b 10 0 else break w f 1E35 b 1E6 1E35 b 1E6 PrintW w j else f 10 35 tf f 1E38 b 1000 0 for i 0 j 35 i 4 i j if tf b 1 b b 10 0 else break w f 1E38 b 1E6 1E38 b 1E6 PrintW w j void PrintW unsigned long w char j reentrant 科学记数法 显示十进制尾数和阶 码 ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房产经纪人销售技巧与客户关系管理
- 心理学角度解读面试难题与应对策略
- 广州幼教面试幼儿安全防护措施
- 抵押贷款业务风险预警方案
- 员工培养与激励方案模板
- 压力容器工艺工程师热处理工艺规范
- 代谢优化策略在干细胞治疗中的个体化方案
- 医院血液透析流程规范解析
- 如何运用心理辅导技巧提升学生学习效果
- 执业药师西药调剂规范
- 2025单证员工作总结
- 焊工技术水平提升计划
- 2025年广西公需科目试题1卷
- 安全生产工作任务清单
- 餐饮店铺选址课件
- 教学方法创新案例及设计方案
- 2025年中式烹调师(技师)考试题库及答案
- 叉车理论培训知识大全课件
- 聚氨酯硬泡配方设计说明书
- 2025年湖南公务员考试申论试题(行政执法卷)
- 文化旅游产品创新设计与营销策略
评论
0/150
提交评论