找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

为什么我这个单片机计算器程序200*200往上的数 结果不对

查看数: 1795 | 评论数: 10 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-6-13 13:29

正文摘要:

#include <reg51.h> #include <stdio.h> #include <intrins.h> #define u8  unsigned char #define u16  unsigned char sbit LCDEN=P3^4; sbit RS=P3^5; sbit RW=P3^6; sbit BF=P0^ ...

回复

ID:1034715 发表于 2022-6-14 20:13
sum1 改成int64 试试
还有double浮点数和比较整数比较时 可以参考这篇文章 搜索 Checking if float is an integer - Stack Overflow

if (fabsf(roundf(z) - z) <= 0.00001f) {
    printf("integer\n");
} else {
    printf("fraction\n");
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:844772 发表于 2022-6-14 09:00
蒋蒋丫丫 发表于 2022-6-13 19:33
改成 float 会程序错误

我用的keil

你要看看到底要计算多少位数,还有是否可以使用科学计数法,要是太多位数,用long 的也不够,就只能拆开计算了。
ID:1025149 发表于 2022-6-13 19:33
glinfei 发表于 2022-6-13 15:26
程序写得挺好的,而且居然发现40000以上有问题很厉害了。因该是  int sum1; 的问题,有符号的int,范围是正 ...

改成 float 会程序错误

我用的keil
ID:1025149 发表于 2022-6-13 19:32
lkc8210 发表于 2022-6-13 15:00
sum1是int -32768~32767
sum是double 0~4294967295
如果sum = 200 * 200 = 40000

那我该怎么改呢
ID:824490 发表于 2022-6-13 16:18
"#define u8  unsigned char "ok,
"#define u16  unsigned char" ?????????
ID:1034355 发表于 2022-6-13 15:36
没清零
ID:844772 发表于 2022-6-13 15:26
程序写得挺好的,而且居然发现40000以上有问题很厉害了。因该是  int sum1; 的问题,有符号的int,范围是正负32767吧,所以40000以上就算不了了。
ID:94031 发表于 2022-6-13 15:08
因为你运算结果 sum1数据类型是 int 能表示最大整数是32767,200*200=40000超过32767,所以处理错误。
ID:161164 发表于 2022-6-13 15:00
sum1是int -32768~32767
sum是double 0~4294967295
如果sum = 200 * 200 = 40000
sum1 = sum
sum1会变为 -25536
于是sum1 != sum
sprintf(m,"%f",sum);
但sum不是float
于是输出0.000000
ID:426861 发表于 2022-6-13 14:37
先搞清楚数据类型,尤其是经过运输后的数据是否存在溢出情况

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

Powered by 单片机教程网

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