找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1210|回复: 10
打印 上一主题 下一主题
收起左侧

请教这段代码的算法错在哪?

[复制链接]
跳转到指定楼层
楼主
ID:1136941 发表于 2025-1-8 18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

        fdsj(hour,min);//放电时间显示
        fd_AH=((hour*60+min)*FD_A)/60/10;//放电容量计算
        FDdisp_AH(fd_AH);//放电容量显示

        hour-----小时
        min------分钟
        FD_A----放电电流
        fd_AH---放电容量
      
        这是一台DIY大功率智能脉冲快速充电机代码中放电容量计算的代码,测试发现fd_AH(放电容量)随着时间一增加到108AH就归零从头开始计算,这样
        108AH以上的电池就不能准确显示了,百思不得其解,请指点。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:844772 发表于 2025-1-9 09:02 | 只看该作者
fd_AH的变量声明是啥? 编译程序优化打开没?要不先把fd_AH=((hour*60+min)*FD_A)/60/10;//放电容量计算 改成fd_AH=(hour/60+min/600)*FD_A)试试?
回复

使用道具 举报

板凳
ID:1073939 发表于 2025-1-9 09:12 | 只看该作者
估计楼主这4个变量类型为unsigned char。
(hour*60+min) 最大 255
FD_A 最大255
所以fd_AH经过计算(255*255)/60/10=108;
要把这几个变量类型改为unsigned int
回复

使用道具 举报

地板
ID:1136941 发表于 2025-1-9 12:30 | 只看该作者
glinfei 发表于 2025-1-9 09:02
fd_AH的变量声明是啥? 编译程序优化打开没?要不先把fd_AH=((hour*60+min)*FD_A)/60/10;//放电容量计算 改 ...

fd_AH的变量声明是uint,放电容量计算 改成fd_AH=((hour/60+min/600)*FD_A)后计算结果始终是零不变化。
回复

使用道具 举报

5#
ID:1136941 发表于 2025-1-9 12:36 | 只看该作者
ydatou 发表于 2025-1-9 09:12
估计楼主这4个变量类型为unsigned char。
(hour*60+min) 最大 255
FD_A 最大255

hour和min的变量类型是uchar,  FD_A和 fd_AH是uint,现在把hour,min也改为uint后还是一到108就归零了。
回复

使用道具 举报

6#
ID:161164 发表于 2025-1-10 14:58 | 只看该作者
FDdisp_AH的传参类型是啥?
回复

使用道具 举报

7#
ID:1136941 发表于 2025-1-10 17:12 | 只看该作者
lkc8210 发表于 2025-1-10 14:58
FDdisp_AH的传参类型是啥?

是uint
回复

使用道具 举报

8#
ID:1073939 发表于 2025-1-11 08:50 | 只看该作者
太阳雨ZW 发表于 2025-1-9 12:36
hour和min的变量类型是uchar,  FD_A和 fd_AH是uint,现在把hour,min也改为uint后还是一到108就归零了。

51确实容易出现计算错误。
试试这样
unsigned long i=hour*60+min;
i*=FD_A;
fd_AH/=600;
FDdisp_AH(fd_AH);/
回复

使用道具 举报

9#
ID:343102 发表于 2025-1-11 10:57 | 只看该作者
变量计算过程中也不能溢出。
我也遇到过这种情况,摸索好久才解决。
可把变量定义为ulong,或先除后乘,先减后加,防止计算过程中数值溢出无法存放。
我以前就是为了提高精度采用先乘后除,结果到一定数值后突然变0,经过追踪发现这个数值是65535,这才醒悟。
回复

使用道具 举报

10#
ID:1136941 发表于 2025-1-11 11:07 | 只看该作者
ydatou 发表于 2025-1-11 08:50
51确实容易出现计算错误。
试试这样
unsigned long i=hour*60+min;

多谢指点,按照你的算法正常了,非常感谢!
回复

使用道具 举报

11#
ID:1136941 发表于 2025-1-11 12:08 | 只看该作者
风158 发表于 2025-1-11 10:57
变量计算过程中也不能溢出。
我也遇到过这种情况,摸索好久才解决。
可把变量定义为ulong,或先除后乘, ...

谢谢回复,按照8楼的算法就正常了。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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