lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2199回复:8

如何往x5045里存浮点数?

楼主#
更多 发布于:2005-04-03 19:32
我要作一个除法其结果为浮点数,应该怎么往x5045里保存?

Vlu_Temp=(float)232/(float)1000
在watch窗口看到的结果是0.232(hex)。
应该如何写入?
l=z=l 我听说,灌水是使分数快速增长的有效方法
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-03 21:06
Vlu_Temp还不支持右移8位。明明是float 占4个字节,为什么不让右移?
这他妈的作PID运算还不偏到天上去了。真是个垃圾!
l=z=l 我听说,灌水是使分数快速增长的有效方法
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-04 14:51
  浮点数就占4个字节,你就把这4个字节保存下来就行了,读的时候赋给一个浮点变量就行了…………0.232就是十进制来的,不是hex…………既然是float又怎么会给你进行位运算??float和long int虽然都占4个字节,但解释的方法是不同的………… :mad:
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-04 17:37
在watch窗口里 选中 hex格式(不是十进制)也是显示0.232。我想用移位的方法拆成四个byte型 ,可是编译器通不过!
附件名称/大小 下载次数 最后更新
2005-04-04_pp.Uv2 (3KB)  2
l=z=l 我听说,灌水是使分数快速增长的有效方法
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-04 17:39
你可以试一下!编译后看看!
附件名称/大小 下载次数 最后更新
2005-04-04_folat.rar (6KB)  5
l=z=l 我听说,灌水是使分数快速增长的有效方法
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-05 09:15
在watch窗口里选择hex显示对浮点数是无效的,因为它没法以hex的方式来表示…………所以怎么都会以十进制来显示的……
你那个程序编译不了是正常的呀,都说了浮点数是不能用位运算的了~((float)232/(float)1000)在赋给Vlu_Temp前还是浮点数而不是uint~~我不知你的程序要求的数据是怎样的,如果改成:
    Vlu_Temp=((float)232/(float)1000);
    Vlu_Temp>>=8;
是可行的,但Vlu_Temp的址就只是结果的整数部分了,如果你想把整个浮点数都保存下来的话,就要用内存操作函数了~(直接用指针也可以)如先定义一个浮点变量:
  float result;
  result=((float)232/(float)1000);
  memcpy((uchar *)&Vlu_Temp,(uchar *)&result,4);
这样Vlu_Temp里就是浮点的结果,当然你看到的值会跟结果不一样,但按字节来说数据是一样的。然后再处理就可以了~

[编辑 -  4/5/05 by  lbcat]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-05 09:26
我在键盘上没设小数点,想让客户输入三个小于等于9的数字,由程序完成除以100,以得到两位小数,作为系数。要保持一定的精度。我想等用户(自己调试时也要用)输入完成,并且除完100后保存,以后直接调用。就像PID运算的参数。
你有好法么?
l=z=l 我听说,灌水是使分数快速增长的有效方法
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-05 11:23
 其实你没必要先除100再保存,你可以直接保存整数形式,等运算到最后结果才除以100,这样就避免了很多浮点运算,而且保存操作也方便~~
 例如客户输入的系数是123(当然运算时是用1.23),你就把123这个整数保存下来就可以了。只要拿出来运算时记得除以100就可以(最好是完成所有整数运算再除),甚至不除100也可以,只要你显示或者输出的时候对结果做相应处理就行了~~总之就是在保证数据完整的前提下尽量避免浮点运算~~ :D
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-05 18:30
我也是这么想的!也只有如此了。
l=z=l 我听说,灌水是使分数快速增长的有效方法
游客

返回顶部