蒋蒋丫丫 发表于 2022-6-13 19:33 你要看看到底要计算多少位数,还有是否可以使用科学计数法,要是太多位数,用long 的也不够,就只能拆开计算了。 |
glinfei 发表于 2022-6-13 15:26 改成 float 会程序错误 我用的keil |
lkc8210 发表于 2022-6-13 15:00 那我该怎么改呢 |
"#define u8 unsigned char "ok, "#define u16 unsigned char" ????????? |
没清零 |
程序写得挺好的,而且居然发现40000以上有问题很厉害了。因该是 int sum1; 的问题,有符号的int,范围是正负32767吧,所以40000以上就算不了了。 |
因为你运算结果 sum1数据类型是 int 能表示最大整数是32767,200*200=40000超过32767,所以处理错误。 |
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 |
先搞清楚数据类型,尤其是经过运输后的数据是否存在溢出情况 |