STM8S单片机将unsigned long型变量装入float型中出错

[复制链接]
 楼主| motor666 发表于 2012-2-23 15:13 | 显示全部楼层 |阅读模式
一个在PIC单片机中的成熟的程序,其中有两个变量:unsigned long Sample_Value 和float Voltage ;  运算过程中有:Voltage = Sample_Value; 编译不提示错,单运行后Voltage的值并不等于Sample_Value;将Sample_Value强制转换类型成float:
Voltage = (float) Sample_Value;  结果也是错的。
香水城 发表于 2012-2-23 15:25 | 显示全部楼层
这不奇怪。

学软件的都知道,作为基本常识,浮点数是不能拿来做比较的,经运算后浮点数的尾数精度是有变化的。
香水城 发表于 2012-2-23 15:27 | 显示全部楼层
一般讲:unsigned long 的内码是32个二机制位,而float的内码是16个二机制位,经过转换之后必然有精度损失。
李富贵 发表于 2012-2-23 15:35 | 显示全部楼层
一般讲:unsigned long 的内码是32个二机制位,而float的内码是16个二机制位,经过转换之后必然有精度损失。
香水城 发表于 2012-2-23 15:27

IEEE-754标准float应该是1位符号,8位阶码,23位尾数,相当于7位十进制精度。

评分

参与人数 1威望 +2 收起 理由
香水城 + 2 拿标准说话,有说服力!

查看全部评分

wangc111 发表于 2012-2-23 15:51 | 显示全部楼层
了解下
香水城 发表于 2012-2-23 16:01 | 显示全部楼层
IEEE-754标准float应该是1位符号,8位阶码,23位尾数,相当于7位十进制精度。


李富贵 发表于 2012-2-23 15:35


是的,我在3楼的表述有误,:L
sinadz 发表于 2012-2-23 16:27 | 显示全部楼层
浮点数不能做比较
 楼主| motor666 发表于 2012-2-24 13:31 | 显示全部楼层
感谢各位指点,明白原因了,我不是学软件的,可现在又必须得做一些软件,各位能否再指点一下,无符号long型的数怎么变成浮点数,因为采集的数据总得拿过来运算,这两种数肯定有一个接口吧。
香水城 发表于 2012-2-24 13:47 | 显示全部楼层
“无符号long型的数怎么变成浮点数”,LZ位就是答案。

但是请记住变换完后,如果再变回去,结果不一定与原来相等。

例:unsigned long A, B; float X;
   X = A;
   B = X
   if (A == B)   // 这里可能比较相等,也可能比较不相等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

426

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

176

主题

426

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部