当前位置: 代码迷 >> 单片机 >> 乘法招致数据溢出
  详细解决方案

乘法招致数据溢出

热度:242   发布时间:2016-04-28 14:48:08.0
乘法导致数据溢出

SYS.Slope=(u32)(SYS.Full_Dat*1000000000/(SYS.W_Full-SYS.W_Zero));

本来通过上面化整运算拟合一条直线的,变量全部采用unsigned long型的,结果发现数据错误了;发现上面的乘法后数据长度已经大于long型了,把Full_Dat的数据类型改为double就正常了;也不是很明白。
就自己敲了下面的代码

char i_;
int j_;
i_=100;
j_=(i_*100000)/1000;

结果是10000;可是第一步的乘法运算长度应该超了int型

double i_;
double j_;
i_=100;
j_=(i_*100000000000)/1000000000;

j_得到的结果是121。搞不懂了,希望能解释下!
------解决思路----------------------
引用:
keil4里面double属于双精度浮点数,长度为64,不应该出现溢出现象吧

不是溢出导致的,应该是浮点整形转换误差引起的,有些整数浮点没法表示只能用近似值
  相关解决方案