假设分母<>0,整数除法可以over/underflow吗?
Can integer division ever over/underflow, assuming the denominator <>0?
(真)整数除法可以over/underflow(假设分母不为 0)吗?
由于值总是保持不变或变小(因为在整数除法中,最小的绝对非零分母为 1,因此结果永远不会大于分子),我认为不会.
我或多或少是在 C/C++ 标准的背景下问的,我对各种现代 CPU 架构在处理整数除法时的不同方式很感兴趣defined/undefined 行为。
Since the value is always either staying the same or getting smaller...
我过去也是这么想的,但是当我们这么说的时候,我们悄悄地假设分母是 positive.
并且由于分母可以是负数,所以有一个晦涩但毁灭性的案例:在 2 的补码算法下,INT_MIN / -1
的数学结果是比 INT_MAX
多一的数。
也就是说,在16位2的补码机上,INT_MIN
是−32768,完全可以表示,但是−32768÷−1想要+32768,但是INT_MAX
只是32767。同样,在32位中,-2147483648是可表示的,但也不能被-1整除。
这是 2 的补码算法的一个特殊问题,因为 INT_MIN
的大小与 INT_MAX
不完全相同。另一方面,根据补数或 sign/magnitude 算术,INT_MIN
恰好是 INT_MAX
的负数,因此没有 "ruinous case",据我所知除法很好为所有输入定义(好吧,当然,除了分母中的零)。
(真)整数除法可以over/underflow(假设分母不为 0)吗?
由于值总是保持不变或变小(因为在整数除法中,最小的绝对非零分母为 1,因此结果永远不会大于分子),我认为不会.
我或多或少是在 C/C++ 标准的背景下问的,我对各种现代 CPU 架构在处理整数除法时的不同方式很感兴趣defined/undefined 行为。
Since the value is always either staying the same or getting smaller...
我过去也是这么想的,但是当我们这么说的时候,我们悄悄地假设分母是 positive.
并且由于分母可以是负数,所以有一个晦涩但毁灭性的案例:在 2 的补码算法下,INT_MIN / -1
的数学结果是比 INT_MAX
多一的数。
也就是说,在16位2的补码机上,INT_MIN
是−32768,完全可以表示,但是−32768÷−1想要+32768,但是INT_MAX
只是32767。同样,在32位中,-2147483648是可表示的,但也不能被-1整除。
这是 2 的补码算法的一个特殊问题,因为 INT_MIN
的大小与 INT_MAX
不完全相同。另一方面,根据补数或 sign/magnitude 算术,INT_MIN
恰好是 INT_MAX
的负数,因此没有 "ruinous case",据我所知除法很好为所有输入定义(好吧,当然,除了分母中的零)。