我知道数学中不允许除以零,但是我可以使用以零为模吗?我应该得到什么答案?
例如
10 % 0 = ?
5 % 0 = ?
标准将其定义为“未定义”。
在几乎所有处理器中,求模是通过与除法相同的功能来执行的。在现代较大的处理器中,它是一条指令(例如 x86)。大多数情况下,该指令在除以零时会导致陷阱,无论代码是“打算使用模”还是“商”部分,这都适用。
它是未定义的,因此处理器和编译器可以自由地实现他们想要的东西 - 例如如果处理器只是返回作为输入的任何内容,这也是允许的,或者如果它导致整个操作系统崩溃,那么按照标准,这也是“罚款”。
总而言之,对零取模与除以零一样糟糕。
(请注意,通常情况下,浮点除以零不会捕获[默认情况下],并产生无穷大值,除非被除的值也为零,在这种情况下您会得到“不是数字”)
在 C/C++ 中,这是未定义的行为,根据编译器甚至同一程序的不同实例,您可以获得各种结果。
二元 / 运算符产生商,二元 % 运算符产生商 产生第一个表达式除以的余数 第二。如果 / 或 % 的第二个操作数为零,则行为为 未定义
结果是UB
C11dr §6.5.5 “/ 运算符的结果是第一个操作数除以第二个操作数的商;% 运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,行为未定义。”
从数学上讲,你应该得到无限,这是正确的答案...以编程方式,任何理智的编译器都会警告你除以零,因为在内部模运算符(至少在 C/C++ 中)被转换为除法(在大多数实现中) 。所以你的问题的答案是,在这两种情况下你都会得到一个浮点异常。