OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3786|回复: 9

好大的一个问题。

[复制链接]

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2608
金钱
2608
注册时间
2017-4-4
在线时间
344 小时
发表于 2017-9-17 16:52:23 | 显示全部楼层 |阅读模式
10金钱
进行判断时候,为什么这两个数据不一样,明明是一样的数据,只不过一个用test1表示,之间在watch1窗口进行观察,他们的数据就不一样。
两个数据类型都是float类型,都是全局变量extern float XX;
请问哪里出错了,在后边程序判断的时候一直进入循环。
test1=(mycolor.cal_redfactor-mycolor_init.cal_redfactor);
QQ截图20170917164602.jpg
QQ截图20170917164637.jpg


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2017-9-17 17:29:53 | 显示全部楼层
是不是逻辑处理有问题啊???
回复

使用道具 举报

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2608
金钱
2608
注册时间
2017-4-4
在线时间
344 小时
 楼主| 发表于 2017-9-17 17:48:52 | 显示全部楼层
FantaSy_ 发表于 2017-9-17 17:29
是不是逻辑处理有问题啊???

应该没有问题的吧,我的主要问题是
test1=(mycolor.cal_redfactor-mycolor_init.cal_redfactor);
在watch窗口中进行观察,test1的值应该和(mycolor.cal_redfactor-mycolor_init.cal_redfactor)是一样的,但是实际上两者并没有相同。
这样才导致一直进入循环。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2017-9-17 19:49:05 | 显示全部楼层
没看到你判断的地方,哪里循环了?
你要知道,浮点型是不能精确存储的。
判断浮点型的笔试题也很经典的,不能用==判断。
例如float f = 0.12;实际上常见的可能是0.119999或0.120001。
你可以用范围判断f-0.12的绝对值<0.000002之类。
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2017-9-17 20:08:42 | 显示全部楼层
如果你定义了float的a和b。
执行
a = 0.0259;
b = a;

a、b不是一个数的话,可能b的内存一部分被别的地方越界抢占了。例如数组越界之类,b前面定义的那个看看有没有问题。

方便的话上传,让其他人看看是不是一样现象。
小小蜗牛
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-9-17 20:33:28 | 显示全部楼层
是不是函数运行了两边结果出问题了。应该是逻辑的问题,你仔细查查
回复

使用道具 举报

6

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2017-7-25
在线时间
39 小时
发表于 2017-9-18 09:02:25 | 显示全部楼层
float类型是不精确的,你可以试试5楼的方法
回复

使用道具 举报

15

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2017-5-20
在线时间
43 小时
发表于 2017-9-18 09:14:43 | 显示全部楼层
浮点数一般只能做大、小条件判断,不能做等于判断,因为它不精确。
回复

使用道具 举报

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2608
金钱
2608
注册时间
2017-4-4
在线时间
344 小时
 楼主| 发表于 2017-9-18 11:12:10 | 显示全部楼层
jiutianshenjian 发表于 2017-9-17 20:08
如果你定义了float的a和b。
执行
a = 0.0259;

谢谢你。
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2017-9-18 13:52:18 | 显示全部楼层
e19 是往后小数点19位的意思,也就是非常非常小的意思。test1=(mycolor.cal_redfactor-mycolor_init.cal_redfactor),从你上面的来看,确实是减出来后,特别小,没毛病
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 07:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表