本人在做matlab代码转C语言代码时,排查BUG,终于发现,问题出在mod取余函数:
float floatmodint(float ft, int it)//浮点数对整数取余
{
int intpart = (int)ft;
return ft - intpart + (intpart % it);
}
以1.369余1为例,确实,matlab的mod函数的计算结果与floatmodint函数的返回值一致,均为0.369.
MATLAB计算结果
C计算结果
然而,对于负数的取余就有点意思了。
以-1.369为例
Matlab对负数取余
该C代码对负数取余
我人傻了,负数取余是这么取余的嘛???看起来越简单的函数越要注意它的实现,当初写C代码的时候没把它当个人,现在它给我了一拳+_+[浪费我两天时间排查代码~_~’’’’],记录一下这件事,权当是教训了。
附上:C语言实现float对int的取余的正确代码,其实我要当时看一眼matlab对mod源码里的注释也不至于!!!
float floatmodint(float ft, int it)//#include<math.h>
{
//printf("floor(x./y) = %d\n",(int)(ft/it));
return ft - floor(ft/it)*it;
}
matlab中的注释
*一种植物!!!!