最近我对IEEE754标准下溢的定义感到困惑。我们知道如果一个实现不支持次正规数,那么可以表示的最小数是MinNorm = 1.0 * 2 ^ -126。对于任何操作,如果其结果小于MinNorm,将被视为下溢。但是如果实现支持次正规数,那么可以表示的最小数是MinSubnorm = 1.0 * 2 ^ -149。现在问题是:如果操作的结果小于MinNorm,它是否会下溢?小于MinSubnorm怎么样?
现在我正在研究支持次正规数的FPU。我们假设舍入前的结果严格地在-MinNorm和+ MinNorm之间,并且在舍入后它也将小于MinNorm(使用次正规数表示)。我认为它是什么?下溢或非下溢?如果我需要设置下溢的状态位?
我在网上找到了一些信息,但意见分歧如下:
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/underflow.html 当您执行小于最小幅度非零数的操作时,会发生下溢。在IEEE 754单精度中,这意味着具有小于1.0 x 2-149的幅度(即绝对值)的值。
http://en.wikipedia.org/wiki/Arithmetic_underflow 当浮点运算的真实结果的幅度(即接近零)小于目标数据类型中可表示为正常浮点数的最小值时,可能会发生算术下溢
答案 0 :(得分:1)
IEEE754 2008标准(第7.5节)定义了下溢异常应在结果
时发出信号所以在这种情况下,维基百科是正确的。
更新:默认规则是您要设置状态位,除非结果是准确的。例如,如果从加法或减法中获得次正规结果,则不需要进行舍入,因此您不会设置下溢状态位。另一方面,如果您有一个数字1.0001
并将其乘以2^-149
,那么结果将无法准确表示,并将四舍五入为2^-149
,因此您可以设置下溢和不精确状态位。
答案 1 :(得分:0)
IEEE 754支持逐渐下溢。当一个数字小于最小正常浮点数时开始,如第二个引用所述,并以总下溢为零结束,如第一个所述。