请教:Keil C UV4 中unsigned long型变量运算后输出为float型出错。

2020-01-30 13:43发布

环境51,Keil UV4
写一段程序用于对两组数据求一元线性回归,在执行到这句时遇到问题:
float VTk;
unsigned long SigmaVjTj,SigmaVj,SigmaTj;

VTk=(float)(SigmaVjTj-SigmaVj*SigmaTj/j)/(SigmaVj2-SigmaVj*SigmaVj/j);

其中SigmaVjTj=2660200
SigmaVj=2564
SigmaTj=5500
j=5
按说计算后应当为VTk= - 5.609872255,实际调试中我用如下语句
PrintChar(24,60,(unsigned char)VTk/1000000+48,1);
PrintChar(30,60,(unsigned char)VTk%1000000/100000+48,1);       
PrintChar(36,60,(unsigned char)VTk%100000/10000+48,1);
PrintChar(42,60,(unsigned char)VTk%10000/1000+48,1);
PrintChar(48,60,(unsigned char)VTk%1000/100+48,1);
PrintChar(54,60,(unsigned char)VTk%100/10+48,1);
PrintChar(60,60,(unsigned char)VTk%10+48,1);       
把结果打印到LCD,值为000,0122

实在是搞不出来了,向各位高手求救,Help~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Sullivan
1楼-- · 2020-01-30 18:27
自己更新一下:
已经发现的问题有:
PrintChar();中(unsigned char)应全部改为(unsigned long)
此时对大于0的float进行数据类型转换显示是正确的,如果float<0则会出错。
接下来研究一下负值的float如何转换。大家知道的说一声啊,谢谢啦。
hongjie0216
2楼-- · 2020-01-30 22:13
你把j改成5.0 试试
Sullivan
3楼-- · 2020-01-30 22:39
 精彩回答 2  元偷偷看……
millwood0
4楼-- · 2020-01-30 23:16
"请教:Keil C UV4 中unsigned long型变量运算后输出为float型出错。"

the error is due to your inability to understand c. it has nothing to do with Keil.

"这是为什么呢?"

that is fairly simple, isn't it?
Sullivan
5楼-- · 2020-01-31 01:55
回复【4楼】millwood0
-----------------------------------------------------------------------

……
既然simple为什么不顺便说说呢。
Sullivan
6楼-- · 2020-01-31 05:44
我现在能想到的办法是先判断结果的正负,为负就对调减法算式,确保结果是非负的。然后另外用一个bit记录正负信息。
晕。

一周热门 更多>