“mod”和“remaining”之间有什么区别?
我的朋友说“mod”和“remaining”有区别。
如果是这样,C和C ++有什么不同? “%”是指C中的“mod”还是“rem”?
模数和余数是有区别的。 例如:
-21
mod 4
是3
因为-21 + 4 x 6
是3
。
但-21
除以4
得到-5
,余数-1
。
对于积极的价值观,没有任何区别。
“%”是指C中的“mod”还是“rem”?
在C中, %
是余数。
…,
/
运算符的结果是舍弃任何小数部分的代数商…(这通常被称为“截向零”)。C11dr第6.5.5节
%
运算符的操作数应具有整数types。 C11dr§6.5.52
/
运算符的结果是第一个操作数除以第二个操作数的商。%
运算符的结果是余数 … C11dr第6.5.5节5
“mod”和“余数”有什么区别?
C没有定义“mod”,比如欧几里得除法中使用的整数模函数或其他模 。 当a
为负时,“欧几里得mod”与C的a%b
操作不同。
// a % b 7 % 3 --> 1 7 % -3 --> 1 -7 % 3 --> -1 -7 % -3 --> -1
作为欧几里德划分
7 modulo 3 --> 1 7 modulo -3 --> 1 -7 modulo 3 --> 2 -7 modulo -3 --> 2
候选模数码:
int modulo_Euclidian(int a, int b) { int m = a % b; if (m < 0) { // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN m = (b < 0) ? m - b : m + b; } return m; }
注意浮点数: double fmod(double x, double y)
即使被称为“fmod”,它与欧几里得除法“mod”不一样,但类似于C整数余数:
fmod
函数计算x/y
的浮点余数。 C11dr§7.12.10.12
fmod( 7, 3) --> 1.0 fmod( 7, -3) --> 1.0 fmod(-7, 3) --> -1.0 fmod(-7, -3) --> -1.0
注意:C也有一个类似的命名函数double modf(double value, double *iptr)
,它将参数值分解为整数部分和小数部分,每个部分与参数具有相同的types和符号。
在math中,模运算的结果是欧几里得除法的余数。 但是,其他公约也是可能的。 计算机和计算器有各种存储和表示数字的方式; 因此它们对模运算的定义取决于编程语言和/或底层硬件。
7 modulo 3 --> 1 7 modulo -3 --> -2 -7 modulo 3 --> 2 -7 modulo -3 --> -1