除以零的结果是什么?

yoo*_*er8 12 theory divide-by-zero

要清楚,我不是在寻找NaN或无穷大,或者问x/0应该是什么答案.我正在寻找的是:

基于分工是如何在硬件中执行的(我不知道它是怎么做的),如果师们用的0除数来执行,处理器只是通过操作喝着十分满意,你会来的吧?

我意识到这很大程度上取决于股息,所以对于一个具体的答案,我问这样:如果计算机遵循标准的分工操作,计算机会吐出什么42 / 0

更新:

我会试着更清楚一些.我问的是在位级别用数字完成的实际操作是为了达到解决方案.操作的结果只是位.当发现除数为零时,NaN和错误/异常发挥作用.如果分裂实际发生了,会出现什么位?

Jon*_*rdy 12

它可能不会停止.整数除法可在线性时间通过重复的减法来进行:为7/2,则可以从7减去2共3次,所以这是商和余数(模数)为1.如果要提供一个将0除以这样的算法,除非有一个机制来阻止它,算法不会停止:你可以无限次地从42中减去0而不会到达任何地方.

从类型的角度来看,这应该是直观的.未定义的计算结果非停止一个是⊥("底部"),未定义的值栖息每一种类型.除零没有在整数上定义,因此它应该通过引发错误或未能终止来正确地产生⊥.前者可能更可取.;)

其他更有效(对数时间)除法算法依赖于收敛于商的序列; 对于0的红利,据我所知,这些将无法收敛(即,未能终止)或产生0.请参阅维基百科上的分部.

浮点除法同样需要一个特例:划分两个浮点数,减去它们的指数并对其有效数进行整数除法.相同的底层算法,同样的问题.这就是为什么在IEEE-754中存在正负无穷大的表示,以及有符号零和NaN(对于0/0).

  • 它*可以通过重复减法来实现,但实际上并不是...... (5认同)

Gre*_*ill 8

对于具有内部"除"指令的处理器,例如x86 with div,如果尝试除以零,CPU实际上会导致软件中断.此软件中断通常由语言运行时捕获并转换为适当的"除以零"异常.


Oli*_*rth 5

硬件分配器通常使用流水线长分割结构.

假设我们现在谈的是整数除法(而不是浮点); 长除法的第一步是对齐最重要的一步(在试图从除数中减去除数之前).显然,在0的情况下这是未定义的,所以谁知道硬件会做什么.如果我们假设它做了一些正确的事情,下一步是执行log(n)减法(其中n是位位置的数量).对于导致正结果的每个减法,在输出字中设置1.因此,此步骤的输出将是一个全1字.

浮点除法需要三个步骤:

  • 取代指数的差异
  • 尾数的定点划分
  • 处理特殊情况

0由全0(尾数和指数)表示.然而,在尾数中始终存在隐含的前导1,因此如果我们不将此表示视为特殊情况,则它看起来和行为就像2的极小功率.