找回密码
 立即注册
查看: 921|回复: 5

宏定义中加2是为了自动实现四舍五入?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:374
  • 最近打卡:2025-04-29 08:33:10

16

主题

137

回帖

978

积分

高级会员

积分
978
发表于 2024-2-22 12:25:24 | 显示全部楼层 |阅读模式
本帖最后由 pursuing 于 2024-2-22 12:29 编辑

我在学习《STC8H》pdf手册,其中 17.10.4 串口 2 使用定时器 2 做波特率发生器 章节中,有下面的宏定义:

#define FOSC 11059200UL
#define BRT (65536 - (FOSC / 115200+2) / 4)  //加 2 操作是为了让 Keil 编译器自动实现四舍五入运算

我认为这个注释是不是有问题?因为C语言的除法是小数直接丢弃,不存在四舍五入吧。应该是99/4=24和(99+2)/4=25这种区别。
而就这里频率设11059200而言,除以115200,正好等于96,加不加2 除以4,结果也都是24,仿真也验证了。应该是其他频率时产生99/4和101/4这种区别。
如我说的不对,请大家帮忙指正,谢谢!另外,如能更进一步解释一下这是怎么来的,就更感谢了!


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-2-22 13:03:37 | 显示全部楼层
本帖最后由 tzz1983 于 2024-2-22 14:01 编辑

(65536 - (FOSC / 115200+2) / 4)    // 加2后跟除4, 实际上就是+0.5 => (65536 -  ( (FOSC / 115200) / 4  +0.5 )  )  提前加2是为了计算顺序时不被提前舍去

// 如果  ((FOSC / 115200) / 4)  结果的余数大于0.5, 则加0.5后取整时自动进1, 否则加了0.5也凑不齐1,取整时自动舍去了,
  
所以这就是4舍5入

以你的例举的数据来说, 99除4  = 24.75  取25比取24合理   实际上(99+2)/4  =25  余0.25舍去, 验证结果正确






回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-2-22 14:47:19 | 显示全部楼层
神来之笔,醉了,爱了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

积分
2975
发表于 2024-2-22 14:48:41 | 显示全部楼层
以前写汇编时用过,加上除数的一半再除即可实现四舍五入的效果,具体原理可以参考楼上所说,稍微琢磨一下就明白了。或者你用加5后除以10来算更容易理解:
(0+5)//10=0
(1+5)//10=0
(2+5)//10=0
(3+5)//10=0
(4+5)//10=0
(5+5)//10=1
(6+5)//10=1
(7+5)//10=1
(8+5)//10=1
(9+5)//10=1
(10+5)//10=1
(11+5)//10=1
(12+5)//10=1
(13+5)//10=1
(14+5)//10=1
(15+5)//10=2
回复 支持 2 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:374
  • 最近打卡:2025-04-29 08:33:10

16

主题

137

回帖

978

积分

高级会员

积分
978
发表于 2024-2-22 16:13:44 | 显示全部楼层
谢谢楼上几位朋友的讲解,说加0.5我就明白了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-02 07:32:37

21

主题

564

回帖

2678

积分

金牌会员

积分
2678
发表于 2024-2-22 16:37:42 | 显示全部楼层
还能这样搞,学习了学习了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:12 , Processed in 0.150273 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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