如何定义支持次正规数的实现(IEEE754)的下溢?

时间:2014-12-12 08:20:51

标签: floating-point ieee-754 underflow

最近我对IEEE754标准下溢的定义感到困惑。我们知道如果一个实现不支持次正规数,那么可以表示的最小数是MinNorm = 1.0 * 2 ^ -126。对于任何操作,如果其结果小于MinNorm,将被视为下溢。但是如果实现支持次正规数,那么可以表示的最小数是MinSubnorm = 1.0 * 2 ^ -149。现在问题是:如果操作的结果小于MinNorm,它是否会下溢?小于MinSubnorm怎么样?

现在我正在研究支持次正规数的FPU。我们假设舍入前的结果严格地在-MinNorm和+ MinNorm之间,并且在舍入后它也将小于MinNorm(使用次正规数表示)。我认为它是什么?下溢或非下溢?如果我需要设置下溢的状态位?

我在网上找到了一些信息,但意见分歧如下:

  1. http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/underflow.html 当您执行小于最小幅度非零数的操作时,会发生下溢。在IEEE 754单精度中,这意味着具有小于1.0 x 2-149的幅度(即绝对值)的值。

  2. http://en.wikipedia.org/wiki/Arithmetic_underflow 当浮点运算的真实结果的幅度(​​即接近零)小于目标数据类型中可表示为正常浮点数的最小值时,可能会发生算术下溢

2 个答案:

答案 0 :(得分:1)

IEEE754 2008标准(第7.5节)定义了下溢异常应在结果

时发出信号
  1. 非零,
  2. 严格地介于-MinNorm和+ MinNorm之间:它实现了这是在舍入之前还是之后,所以你可以让minNorm之下的值得到四舍五入并且不会发出异常信号。
  3. 所以在这种情况下,维基百科是正确的。

    更新:默认规则是您要设置状态位,除非结果是准确的。例如,如果从加法或减法中获得次正规结果,则不需要进行舍入,因此您不会设置下溢状态位。另一方面,如果您有一个数字1.0001并将其乘以2^-149,那么结果将无法准确表示,并将四舍五入为2^-149,因此您可以设置下溢和不精确状态位。

答案 1 :(得分:0)

IEEE 754支持逐渐下溢。当一个数字小于最小正常浮点数时开始,如第二个引用所述,并以总下溢为零结束,如第一个所述。