打印
[开发工具]

KEIL 浮点数取整遇到奇怪值

[复制链接]
1135|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happy_10|  楼主 | 2019-8-25 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在KEIL仿真,当遇到浮点数是128.000时,取整得出的数竟然是127,请问是什么情况?Y=(unsigned int)f_temp;      

使用特权

评论回复
沙发
happy_10|  楼主 | 2019-8-25 16:27 | 只看该作者
其它浮点数取整无问题,就是这个128值出来的数有问题

使用特权

评论回复
板凳
happy_10|  楼主 | 2019-8-25 16:27 | 只看该作者
应该是KEIL仿真显示128,但是16进制值是少于128一点点,所以取到127部分

使用特权

评论回复
地板
zwll| | 2019-8-25 16:31 | 只看该作者
不知道啊,所以定义时候就考虑好这些吧,尽量少转换,估计是Keil编译器的问题

使用特权

评论回复
5
xxmmi| | 2019-8-25 16:34 | 只看该作者

开发板数据线出问题了,要不然可以试试

使用特权

评论回复
6
zwll| | 2019-8-25 16:37 | 只看该作者
编译器还有这个缺陷?多亏我之前没在单片机用过这种操作

使用特权

评论回复
7
zwll| | 2019-8-25 16:41 | 只看该作者

如果你知道什么是浮点数,二进制怎么表示你就知道了;
如果AB是浮点数,if(a==b)...是不能用的;
你的情况请用四舍五入方法得到整数部份

使用特权

评论回复
8
zwll| | 2019-8-25 16:44 | 只看该作者
用KEIL 523测试过了,没这个问题啊。 会不会是你别的处理问题?

使用特权

评论回复
9
zwll| | 2019-8-25 16:48 | 只看该作者
没有碰到这种情况。

使用特权

评论回复
10
dingy| | 2019-8-25 16:52 | 只看该作者

加个小数就行了
比如 +0.000001

使用特权

评论回复
11
pengf| | 2019-8-25 16:56 | 只看该作者
不可能到 128!!!

使用特权

评论回复
12
xxrs| | 2019-8-25 16:59 | 只看该作者
有截图不

使用特权

评论回复
13
zwll| | 2019-8-25 17:03 | 只看该作者
128.000 用浮点数是可以精确表示的, 如果用这样的数值赋值后取整是应该得 128 的.

使用特权

评论回复
14
chenjunt| | 2019-8-25 17:05 | 只看该作者
不过如果是计算结果为 128.000, 那就不好说了, 因为这个结果可能是舍入后的结果, 实际上还并没有达到 128.

使用特权

评论回复
15
chenjunt| | 2019-8-25 17:07 | 只看该作者
所以, 使用浮点数, 由于不精确表示的原因, 是会有这样的问题的, 要特别留意

使用特权

评论回复
16
liuzaiy| | 2019-8-25 17:09 | 只看该作者
f_temp 对应的内存或者寄存器的十六进制值是多少?

使用特权

评论回复
17
songqian17| | 2019-8-25 17:11 | 只看该作者
keil什么版本的? 什么MCU?

使用特权

评论回复
18
chenho| | 2019-8-25 17:12 | 只看该作者
是这样的,比如127.9999显示为128.0,但是取整截取前面就127了

使用特权

评论回复
19
gongche| | 2019-8-25 17:14 | 只看该作者
可能是舍入后的结果

使用特权

评论回复
20
huwr| | 2019-8-25 17:16 | 只看该作者
+0.5 再取整

使用特权

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

本版积分规则

744

主题

7973

帖子

6

粉丝