2014-11-04 7 views
4

나는 이것에 대해 오랫동안 탐색 해 왔지만이 질문의 의미를 이해할 수는 없습니다.정상적인 언더 플로

질문 :

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

나는 오버 플로우 조건이 같은 것을 이해 : 정수 X의 최대 값을 저장할 수있는 경우 우리는 X + 1의 값을 할당하는 경우 인 경우 값 x +1은 정수가 수용 할 수있는 가장 낮은 값으로 변환됩니다. 언더 플로가 그 반대 일 뿐이라는 것을 이해합니다.

고성능 과학 계산/선형 대수학의 관점에서 그것은 어떻게 나타 났습니까?

나는 이것을 link으로 읽었지만, 내가 위에서 언급 한 것과 같은 언더 플로우/오버 플로우 스터프라고 생각한다. 우아한 언더 플로가 무엇을 의미합니까?

+0

부동 소수점 숫자가 너무 작아지면 언더 플로우가 발생합니다. 음의 지수가 너무 커짐을 의미합니다. 시스템에서 처리하는 방법을 알아 보려면 가장 작은 숫자를 2로 나눕니다. –

+2

시도해보십시오. http://www.cs.rice.edu/~taha/teaching/05F/210/Labs/Lab07/gradualUnderflow.html – StoneBird

+0

그리고이 http://stackoverflow.com/questions/8111307/gradual-underflow-and -denormalized-numbers-in-ieee – StoneBird

답변

2

좋아, @ StoneBird에 게시 된 링크 당 this link이 특히 도움이되었습니다. 여기에 동일한 것을 보여주는 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; 
} 

변수 i가 분 = POW (2, -129), POW (2, -128) 및 POW (2, -130)를 사용 ... 최종 번호를 변경하는 데 사용 결과와 톱을 볼 수 Denormal 번호가 나타납니다.이 위키 페이지는이 모든 것을 설명합니다.

+0

친절하게도 이것에 대한 귀하의 의견을 알려주십시오. – SeasonalShot