数值取反程序 ,错??

[复制链接]
3725|15
 楼主| Tomzong 发表于 2008-10-30 11:07 | 显示全部楼层 |阅读模式
TE, ce
if(ok_flag){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(rece_buff[5]=='Y'){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;temp_data&nbsp;=&nbsp;-temp_data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ok_flag=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><br />我原本打算输入一个数值:temp_data&nbsp;=&nbsp;32.52;让其输出&nbsp;temp_data&nbsp;=&nbsp;-35.23。结果察看temp_data,不是等于-35.23?怎么回事?专业人士指点一下!&nbsp;&nbsp;&nbsp;<br />
香如故 发表于 2008-10-30 14:14 | 显示全部楼层

写成temp_data = 0-temp_data;试试

  
HWM 发表于 2008-10-30 15:13 | 显示全部楼层

LZ:你的“temp_data = 32.52;”在哪里?

若在“float&nbsp;temp_data&nbsp;=&nbsp;-temp_data;”之前,能成立吗?
 楼主| Tomzong 发表于 2008-10-30 15:35 | 显示全部楼层

是这样的。

float&nbsp;temp_data&nbsp;=35.23;<br />if(ok_flag){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(rece_buff[5]=='Y'){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_data&nbsp;=&nbsp;-temp_data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ok_flag=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
mytempid 发表于 2008-10-30 15:37 | 显示全部楼层

同意3楼

“float&nbsp;temp_data&nbsp;=&nbsp;-temp_data;”这里新定义了一个临时变量,<br />猜测LZ程序中变量定义有问题<br />“temp_data&nbsp;=&nbsp;32.52”中的temp_data与“float&nbsp;temp_data&nbsp;=&nbsp;-temp_data;”的temp_data不是同一个
 楼主| Tomzong 发表于 2008-10-30 15:51 | 显示全部楼层

hehe,

有没有看我最新写的啊<br />
HWM 发表于 2008-10-30 15:57 | 显示全部楼层

LZ:不知你是如何判断的,具体参考一下如下例程:

&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;f&nbsp;=&nbsp;35.23;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;-f;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(f&nbsp;==&nbsp;-35.23)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(f&nbsp;==&nbsp;(float)(-35.23))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 楼主| Tomzong 发表于 2008-10-30 16:29 | 显示全部楼层

haha ,看来是我没有解释清楚,是这样的。

float&nbsp;temp_data,temp;<br />...........<br />..............<br />if(ok_flag){&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(rece_buff[5]=='Y')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;-temp_data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;temp&nbsp;=&nbsp;temp_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;ok_flag=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;return&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;...............<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;................<br />我的意思是,一般情况下是返回本身数值,如果遇到rece_buff[5]=='Y'的情况返还&nbsp;负值;但测量的结果不是这样。
HWM 发表于 2008-10-30 16:35 | 显示全部楼层

LZ:我说的就是你的“测量”问题。

用这个:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(f&nbsp;==&nbsp;-35.23)&nbsp;//&nbsp;不能得到你所期望的结果<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />还是这个:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(f&nbsp;==&nbsp;(float)(-35.23))&nbsp;//&nbsp;这个OK<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
xwj 发表于 2008-10-30 17:58 | 显示全部楼层

唉,基本常识:浮点数不能直接用==来判断相等!

  
 楼主| Tomzong 发表于 2008-10-31 11:34 | 显示全部楼层

9楼的,基本知识还是要加强阿

  
HWM 发表于 2008-10-31 15:33 | 显示全部楼层

晕!不知谁应加强基本知识。楼主:你到底是怎么测的还是

若你质疑&nbsp;“temp_data&nbsp;=&nbsp;-temp_data;”,那就应把问题亮清楚。要别人猜可不是什么好主意。关于浮点数的判别还真涉及到一些“基本知识”,但楼主你看样子还没领会。
systemboy 发表于 2008-11-2 01:29 | 显示全部楼层

刚才看了下书,好象没有说"=="不能比较浮点数啊?

书上只是说要同一类型数据.&nbsp;用UV2编了个程序看了下,9楼说的两种方法都可以啊.观察RAM中变量变化,正负浮点数只是符号位变了一下,其他都不变啊!还请高手指点下,直接用&nbsp;==&nbsp;比较浮点数有什么危险吗?
 楼主| Tomzong 发表于 2008-11-3 14:01 | 显示全部楼层

感谢12楼的朋友的参与!但我还是要说..

51是不支持浮点的相关运算的,像你说<br />&nbsp;if&nbsp;(f&nbsp;==&nbsp;(float)(-35.23))&nbsp;//&nbsp;这个OK<br />------------------------------------<br />folat&nbsp;的数值,如果判断相等,如果你得到&nbsp;35.2367和35.2689,那你说他们相等吗??
systemboy 发表于 2008-11-3 16:14 | 显示全部楼层

楼主,为什么我用的两种比较方式都可以呢?

我看了编译后的汇编程序,浮点数可以比叫啊?到底是什么呢?谁能解释一下,太迷惑了.可能很菜的问题,但我就是没明白啊!
HWM 发表于 2008-11-4 08:07 | 显示全部楼层

to 14L:你还是没说明白你的疑惑究竟是什么,让人越听越糊

我原本想问的是:<br /><br />你所说“原本打算输入一个数值:temp_data&nbsp;=&nbsp;32.52;让其输出&nbsp;temp_data&nbsp;=&nbsp;-35.23。结果察看temp_data,不是等于-35.23?怎么回事?专业人士指点一下!”<br /><br />这里的“不是等于-35.23”是如何判断的?结果答非所问。<br /><br /><br />至于<br /><br />“folat&nbsp;的数值,如果判断相等,如果你得到&nbsp;35.2367和35.2689,那你说他们相等吗??”<br /><br />这玩意儿任何语言都不会认为是相等的,和51,ARM等没关系。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

93

帖子

0

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