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。搞不懂了,希望能解释下!
------解决思路----------------------
不是溢出导致的,应该是浮点整形转换误差引起的,有些整数浮点没法表示只能用近似值