负数求余数 C 和 Matlab&Python 处理不一样
在百度看到这个问题:http://zhidao.baidu.com/question/937487369300959012.html?oldq=1
用matlab和Python测试了下,发现都是这样:
和一开始的想法一致:
负数取余 在原数加上或者减去 整数个 -3 使得结果落在 -2~0之间。
比如: 1%-3 1 + 1*(-3) = -2 余数是 -2
7%-3 7 + 3*(-3) = -2 余数是 -2
-4%-3 -4 -1*(-3)= -1 余数是 -1
答完之后发现自己和别人的不一样,自己又用C语言跑了一下发现还真不一样~
百度了下,发现是这么回事:http://zhidao.baidu.com/link?url=YwqRxcU3bGqes74d22wT06MDc1qIQmq4hm91RLnRDkfDVECX1WI0jjqDET5U-7aOcr4noy4bB9bcliQlKg-smdLxDjX6ev_HwMES28nxs27
引用:
对负数的取模运算,C99规定:如果第一操作数为负,则得到的模为负;如果第一操作数为正,则得到的模为正。也就是说这是C的规定。真正的答案不用C的话,就用算术来计算是不是5%-3=-2.95,而在C语言当中就是为第一操作数的正整数,也就是2了。我比较关心,要是我用C来计算这样的问题,那么得出的结果和真正的结果不一样了,只不过是C的结果,遇到这样的问题我应该怎么写这段代码,得到真正的结果。麻烦你了。
-----------------------------------------------------------------------------------------
那岂不是。。。。
C99这样规定没问题么?那算出来的值与通常意义上的数学定义岂不是有点出入~ To do...........................!
~不再更新,都不让我写公式,博客园太拉胯了