2014-12-12 14 views
2

최근에 IEEE754 표준의 언더 플로 정의에 대해 혼란 스럽습니다. 구현에서 비정규 숫자를 지원하지 않으면 표현할 수있는 최소 숫자는 MinNorm = 1.0 * 2^-126입니다. 모든 연산에서 MinNorm보다 작 으면 Underflow로 간주됩니다. 그러나 구현이 비정규 숫자를 지원하면 표현할 수있는 최소 숫자는 MinSubnorm = 1.0 * 2^-149입니다. 이제 문제는 다음과 같습니다. 연산의 결과가 MinNorm보다 작 으면 언더 플로우입니까? MinSubnorm보다 작습니까?비정규 수치를 지원하는 구현 (IEEE754)에서 언더 플로를 정의하는 방법은 무엇입니까?

이제는 비정규 숫자를 지원하는 FPU 구현에 대해 노력하고 있습니다. 반올림하기 전에 결과가 -MinNorm과 + MinNorm 사이에 있고 반올림 한 후 MinNorm보다 작을 것이라고 가정합니다 (비정규 숫자를 사용하여 표현 가능). 나는 그것을 무엇으로 간주 할 것인가? 언더 플로우 또는 언더 플로우가 아닌가? 언더 플로우 상태 비트를 설정해야하는 경우?

나는 온라인으로 약간의 각종 정보를 발견하지만, opinons은 다음과 분기 : 당신은 작은 크기 비제 수보다 작다 작업을 수행 할 때

  1. http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/underflow.html 언더 플로가 발생합니다. IEEE 754 단 정밀도에서 이것은 1.0 x 2-149 미만의 크기 (즉, 절대 값)를 갖는 값을 의미합니다. 부동 소수점 연산의 실제 결과는 목표 데이터 유형에서 통상의 부동 소수점 수와 최소치 표현할 수 이상 (즉, 0에 가깝게한다)의 크기가 작은 경우

  2. http://en.wikipedia.org/wiki/Arithmetic_underflow 언더 플로가 발생할 수

+0

w.r.t. IEEE 754, 위키 백과 참조가 더 정확합니다. 대충 말하면, 가장 작은 * normal *보다 작은 결과는 언더 플로우를 나타냅니다. 세부 사항은 다소 미묘하지만, 컷오프가 반드시 * 정확히 * MinNorm은 아닙니다. 자세한 내용은 "반올림하기 전에 언더 플로우"및 "반올림 한 후 언더 플로"에 대한 Google을 참조하십시오. 또한 언더 플로 플래그 대 언더 플로 신호에 대한 미묘한 차이가 있습니다. –

+0

그리고 참조 1에서 "...보다 작은 연산"은별로 의미가 없습니다. 작업의 크기는 얼마입니까? ''. –

+0

감사합니다! 하지만 지금 나는 비정상적인 수를 지원하는 FPU의 구현에 대해 연구 중이다. 그래서 MinNorm보다 작은 결과를 얻으면 상태와 플래그 비트를 설정할 때 어떻게해야합니까? 언더 플로우로 간주할까요? 또는 MinSubnorm보다 작은 경우? – dawudianfen

답변

1
는 IEEE754 2008 (§7.5)의 결과가

  1. 제로가 아닌 경우 언더 플로우 예외가 신호되어야한다고 정의 표준 및
  2. -MinNorm 사이 엄격
  3. 및 + MinNorm는

    : 그것은 잎 이것이 반올림 전인지 반올림인지를 구현하기 때문에 minNorm 바로 아래의 값을 반올림하여 예외를 알리지 못하게 할 수 있습니다.

그래서이 경우 위키 백과는 정확합니다.

업데이트 : 결과가 정확한 경우를 제외하고 기본 규칙은 상태 비트를 설정하는 것입니다. 예를 들어, 비정규 결과가 더하기 또는 빼기에서 얻은 경우 라운딩이 필요하지 않으므로 언더 플로우 상태 비트를 설정하지 않아도됩니다. 반면에 숫자가 1.0001이고이를 2^-149으로 곱하면 결과를 정확히 표현할 수 없으며 반올림 및 부정확 한 상태 비트를 설정하므로 2^-149으로 반올림됩니다.

+0

고맙지 만 내 구현이 비정규 숫자를 지원하고 반올림하기 전에 결과가 -MinNorm과 + MinNorm 사이에 있고 반올림 한 후 비정상 숫자를 사용하여 표현할 수있는 MinNorm보다 작을 것이라고 가정합니다. 나는 그것을 무엇으로 간주 할 것인가? 언더 플로우 또는 언더 플로우가 아닌가? – dawudianfen

+0

죄송합니다, 그 비트를 놓쳤습니다. 내 업데이트 답변을 참조하십시오. –

+0

확인. 알았다. 고맙습니다 ! – dawudianfen

0

IEEE 754는 점진적인 언더 플로우을 지원합니다. 숫자가 가장 작은 보통 부동 소수점 숫자보다 작은 경우 (두 번째 인용문에 설명되어 있음) 시작하고 처음으로 설명한대로 총 언더 플로가 0으로 끝납니다.

+0

고맙습니다. 네, 저도 압니다. 하지만 구현의 관점에서 결과가 점진적인 언더 플로가 될 때 언더 플로 상태 비트를 설정해야합니까? – dawudianfen