打印

数值取反程序 ,错??

[复制链接]
2429|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Tomzong|  楼主 | 2008-10-30 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, ce
if(ok_flag){   
    if(rece_buff[5]=='Y'){  
    float temp_data = -temp_data;           
                              }      
    ok_flag=0;
     }  

我原本打算输入一个数值:temp_data = 32.52;让其输出 temp_data = -35.23。结果察看temp_data,不是等于-35.23?怎么回事?专业人士指点一下!   

相关帖子

沙发
香如故| | 2008-10-30 14:14 | 只看该作者

写成temp_data = 0-temp_data;试试

使用特权

评论回复
板凳
HWM| | 2008-10-30 15:13 | 只看该作者

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

若在“float temp_data = -temp_data;”之前,能成立吗?

使用特权

评论回复
地板
Tomzong|  楼主 | 2008-10-30 15:35 | 只看该作者

是这样的。

float temp_data =35.23;
if(ok_flag){   
    if(rece_buff[5]=='Y'){  
      temp_data = -temp_data;           
                              }      
    ok_flag=0;
     }  

使用特权

评论回复
5
mytempid| | 2008-10-30 15:37 | 只看该作者

同意3楼

“float temp_data = -temp_data;”这里新定义了一个临时变量,
猜测LZ程序中变量定义有问题
“temp_data = 32.52”中的temp_data与“float temp_data = -temp_data;”的temp_data不是同一个

使用特权

评论回复
6
Tomzong|  楼主 | 2008-10-30 15:51 | 只看该作者

hehe,

有没有看我最新写的啊

使用特权

评论回复
7
HWM| | 2008-10-30 15:57 | 只看该作者

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

    float f = 35.23;

    f = -f;

    if (f == -35.23)
    {
    }    
    else
    {
    }

    if (f == (float)(-35.23))
    {
    }    
    else
    {
    }

使用特权

评论回复
8
Tomzong|  楼主 | 2008-10-30 16:29 | 只看该作者

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

float temp_data,temp;
...........
..............
if(ok_flag){   
    if(rece_buff[5]=='Y')
        {  
          temp = -temp_data;           
                 }      
    else  temp = temp_data;
    ok_flag=0;
     }  
 return temp;
   ...............
     ................
我的意思是,一般情况下是返回本身数值,如果遇到rece_buff[5]=='Y'的情况返还 负值;但测量的结果不是这样。

使用特权

评论回复
9
HWM| | 2008-10-30 16:35 | 只看该作者

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

用这个:

    if (f == -35.23) // 不能得到你所期望的结果
    {
    }    
    else
    {
    }

还是这个:

    if (f == (float)(-35.23)) // 这个OK
    {
    }    
    else
    {
    }

使用特权

评论回复
10
xwj| | 2008-10-30 17:58 | 只看该作者

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

使用特权

评论回复
11
Tomzong|  楼主 | 2008-10-31 11:34 | 只看该作者

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

使用特权

评论回复
12
HWM| | 2008-10-31 15:33 | 只看该作者

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

若你质疑 “temp_data = -temp_data;”,那就应把问题亮清楚。要别人猜可不是什么好主意。关于浮点数的判别还真涉及到一些“基本知识”,但楼主你看样子还没领会。

使用特权

评论回复
13
systemboy| | 2008-11-2 01:29 | 只看该作者

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

书上只是说要同一类型数据. 用UV2编了个程序看了下,9楼说的两种方法都可以啊.观察RAM中变量变化,正负浮点数只是符号位变了一下,其他都不变啊!还请高手指点下,直接用 == 比较浮点数有什么危险吗?

使用特权

评论回复
14
Tomzong|  楼主 | 2008-11-3 14:01 | 只看该作者

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

51是不支持浮点的相关运算的,像你说
 if (f == (float)(-35.23)) // 这个OK
------------------------------------
folat 的数值,如果判断相等,如果你得到 35.2367和35.2689,那你说他们相等吗??

使用特权

评论回复
15
systemboy| | 2008-11-3 16:14 | 只看该作者

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

我看了编译后的汇编程序,浮点数可以比叫啊?到底是什么呢?谁能解释一下,太迷惑了.可能很菜的问题,但我就是没明白啊!

使用特权

评论回复
16
HWM| | 2008-11-4 08:07 | 只看该作者

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

我原本想问的是:

你所说“原本打算输入一个数值:temp_data = 32.52;让其输出 temp_data = -35.23。结果察看temp_data,不是等于-35.23?怎么回事?专业人士指点一下!”

这里的“不是等于-35.23”是如何判断的?结果答非所问。


至于

“folat 的数值,如果判断相等,如果你得到 35.2367和35.2689,那你说他们相等吗??”

这玩意儿任何语言都不会认为是相等的,和51,ARM等没关系。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

93

帖子

0

粉丝