阅读:2315回复:8
如何往x5045里存浮点数?
我要作一个除法其结果为浮点数,应该怎么往x5045里保存?
Vlu_Temp=(float)232/(float)1000 在watch窗口看到的结果是0.232(hex)。 应该如何写入? |
|
|
沙发#
发布于:2005-04-03 21:06
Vlu_Temp还不支持右移8位。明明是float 占4个字节,为什么不让右移?
这他妈的作PID运算还不偏到天上去了。真是个垃圾! |
|
|
板凳#
发布于:2005-04-04 14:51
浮点数就占4个字节,你就把这4个字节保存下来就行了,读的时候赋给一个浮点变量就行了…………0.232就是十进制来的,不是hex…………既然是float又怎么会给你进行位运算??float和long int虽然都占4个字节,但解释的方法是不同的………… :mad:
|
|
地板#
发布于:2005-04-04 17:37
在watch窗口里 选中 hex格式(不是十进制)也是显示0.232。我想用移位的方法拆成四个byte型 ,可是编译器通不过!
|
|
|
地下室#
发布于:2005-04-04 17:39
你可以试一下!编译后看看!
|
|
|
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] |
|
6楼#
发布于:2005-04-05 09:26
我在键盘上没设小数点,想让客户输入三个小于等于9的数字,由程序完成除以100,以得到两位小数,作为系数。要保持一定的精度。我想等用户(自己调试时也要用)输入完成,并且除完100后保存,以后直接调用。就像PID运算的参数。
你有好法么? |
|
|
7楼#
发布于:2005-04-05 11:23
其实你没必要先除100再保存,你可以直接保存整数形式,等运算到最后结果才除以100,这样就避免了很多浮点运算,而且保存操作也方便~~
例如客户输入的系数是123(当然运算时是用1.23),你就把123这个整数保存下来就可以了。只要拿出来运算时记得除以100就可以(最好是完成所有整数运算再除),甚至不除100也可以,只要你显示或者输出的时候对结果做相应处理就行了~~总之就是在保证数据完整的前提下尽量避免浮点运算~~ :D |
|
8楼#
发布于:2005-04-05 18:30
我也是这么想的!也只有如此了。
|
|
|