模除

编辑
本词条由“匿名用户” 建档。

在计算中,模运算返回除法的余数或带符号的余数,在一个数除以另一个数后(称为运算的模数)。 给定两个正数a和n,模n(通常缩写为amodn)是a除以n的欧几里德除法的余数,其中a是被除数,n是除数。 例如,表达式5mod2的计算结果为1,因为5除以2的商为2,余数为1,而9mod3的计算结果为0,因为9除以3的商为3,余数为10的余数;3乘以3后,9无需再减去任何东西。 虽然通常使用a和n都是整数来...

目录

模除

编辑

在计算中,模运算返回除法的余数或带符号的余数,在一个数除以另一个数后(称为运算的模数)。

给定两个正数 a 和 n,模 n(通常缩写为 a mod n)是 a 除以 n 的欧几里德除法的余数,其中 a 是被除数,n 是除数。

例如,表达式 5 mod 2 的计算结果为 1,因为 5 除以 2 的商为 2,余数为 1,而 9 mod 3 的计算结果为 0,因为 9 除以 3 的商为 3,余数为 1 0的余数; 3 乘以 3 后,9 无需再减去任何东西。

虽然通常使用 a 和 n 都是整数来执行,但许多计算系统现在允许其他类型的数字操作数。 n 的整数模运算的值范围是 0 到 n − 1(含 0 和 1)(模 1 始终为 0;模 0 未定义,在某些编程语言中可能导致被零除错误)。 有关在数论中应用的较早和相关的约定,请参阅模块化算术。

当 a 或 n 中恰好有一个为负数时,朴素的定义就失效了,并且编程语言在这些值的定义方式上有所不同。

定义的变体

编辑

在数学中,模运算的结果是一个等价类,该类中的任何一个成员都可以被选为代表; 然而,通常的代表是最小正余数,属于该类的最小非负整数(即欧几里得除法的余数)。 然而,其他约定也是可能的。 计算机和计算器有多种存储和表示数字的方法; 因此,它们对模运算的定义取决于编程语言或底层硬件。

在几乎所有的计算系统中,a 除以 n 的商 q 和余数 r 都满足以下条件:

(1)

然而,如果余数不为零,这仍然会留下符号歧义:出现两种可能的余数选择,一种为负,另一种为正,并且出现两种可能的商选择。 在数论中,总是选择正余数,但在计算中,编程语言根据语言和 a 或 n 的符号来选择。 例如,标准 Pascal 和 ALGOL 68 给出正余数(或 0),即使对于负除数也是如此,而一些编程语言,例如 C90,在 n 或 a 中的任何一个为负时将其留给实现(参见§下的表格) 在编程语言中获取详细信息)。 在大多数系统中,模 0 是未定义的,尽管有些系统确实将其定义为 a。

模除

  • 许多实现使用截断除法,其商定义为整数部分函数(向零舍入),即截断为零 有效数字。因此根据等式(1),余数与被除数具有相同的符号
  • Donald Knuth 提倡底除法, 其中 ⌊⌋ 是 floor 函数(向下舍入)。因此根据 等式(1),余数与除数同号
  • Common Lisp 和 IEEE 754 使用舍入除法
  • Common Lisp 也使用上限除法,其商定义为 其中 ⌈⌉ 是上限函数(四舍五入)。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195926/

(1)
词条目录
  1. 模除
  2. 定义的变体

轻触这里

关闭目录

目录