关于matlab的mod问题

    本人在做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
                                                        MATLAB计算结果
C计算结果
                                                                C计算结果

然而,对于负数的取余就有点意思了。
以-1.369为例
mod对负数取余
                                                            Matlab对负数取余
C语言
                                                                        该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中的注释
在这里插入图片描述
*一种植物!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值