优雅的下溢处理

4

我可以帮助您翻译。以下是需要翻译的内容:

我已经寻找了很长时间,但是我无法理解这个问题的含义。

问题:

Write a program in any language to determine how your computer handles graceful 
underflow.

我理解溢出条件是这样的: 如果一个整数可以存储最大值x,如果我们分配一个值为x+1,则值x+1将转换为整数可以容纳的最低值。我了解到反向操作就是下溢。从高性能科学计算/线性代数的角度来看,它是什么情况?我阅读了这个link,但我认为它与我上面提到的下溢/溢出问题相同。优雅的下溢是什么意思?

2
请尝试访问http://www.cs.rice.edu/~taha/teaching/05F/210/Labs/Lab07/gradualUnderflow.html。 - StoneBird
请提供更多上下文信息,以便我能够更好地理解您的请求。 - StoneBird
@King-Ink 是的,这是一个已知的事实。 - SeasonalShot
@StoneBird 好的,但你能给一个类似的例子吗? - SeasonalShot
@BoyLittUp 如链接中所述,该软件无法处理下溢。硬件可以。你所能做的就是运行一些数值不稳定的算法,以便观察到精度损失... - StoneBird
显示剩余6条评论
1个回答

2

好的,根据@StoneBird在这个链接中发布的内容,特别有帮助。下面是我用c语言编写的演示程序。

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{
    unsigned int s,e,m;
    unsigned int* ptr;
    float a,temp=0;
    a=1;
    float min=pow(2,-129);
    while(a>min){
        temp=a;
        a=a/2;
    }
    printf("Value=%e\n",temp);
    ptr=(unsigned int*)&temp;
    s = *ptr >> 31;
    e = *ptr & 0x7f800000;
    e >>= 23;
    m = *ptr & 0x07fffff;
    printf("sign = %x\n",s);
    printf("exponent = %x\n",e);
    printf("mantissa = %x\n",m);
    return 0;
}

在这里,min变量用于改变最终数字...我使用了min=pow(2,-129),pow(2,-128)和pow(2,-130)来查看结果,并看到了Denormal数的出现。这个维基页面解释了所有内容。


请告诉我您对此的看法。 - SeasonalShot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接