2014-03-03 2 views
-1

그래서 f에 대한 지수 값을 반환하려고합니다. x가 무한대 또는 NaN이면 Tmax를 반환해야합니다. f는 단 정밀도 부동 소수점 값의 비트 수준 표현으로 해석되어야하며 예는 부호없는 변수를 전달하는 것을 의미합니다. 나는 편향에 대한 적절한 가치를 제거 할 필요가 있음을 안다. 나는 그 방법을 이해할 수 없다. 원하는 모든 작업을 사용할 수 있지만 그 중 8 개만 사용할 수 있습니다 (= 계산하지 않음).C에서 부동 소수점의 지수 얻기

int float_exp(unsigned uf) { 
    int mask = 2139095040; 
    int hold; 
    hold = uf & mask; 
    if(mask == hold){ 
      return Tmax; 
    } else { 
     return ;// something here??? 
    } 

} 

지수를 얻는 방법을 알아낼 수 없습니다. 어떤 도움을 주시면 감사하겠습니다!

+3

숙제가 아니면, 매뉴얼에서'frexp()'를 찾아보십시오. –

+0

[이진수로 부동 소수점 나누기] (http://stackoverflow.com/questions/22159484/dividing-floating-point-numbers-by-half-in-binary)도 참조하십시오. 직접적인 복제물은 아니지만 밀접한 관련이 있습니다. –

+0

@JonathanLeffler 귀하의 의견은 도움이되지 않습니다. – Shaw

답변

1

숫자가 역 정규화 된 경우 지수에서 127을 뺍니다. 그렇지 않다면 126을 뺍니다.

+0

과 직접 관련이 있으므로 16 진수 마스크를 사용해야합니다. 나는 그것을 지금 생각한다. – Shaw

+0

@Cole 숫자가 역 정규화 된 경우 126을 빼면 그 반대쪽에 있지 않습니다. – chux

2
http://en.wikipedia.org/wiki/IEEE_754-1985

이진 지수가 그래서 당신이했던 것처럼, 0x7f800000에 대해 마스킹 후 (30)을 통해 23 비트에있는 부동 소수점 형식은, 당신은 단지 23 비트와 당신에 의해 왼쪽에서 오른쪽으로 무엇을 이동해야하는

확인 바이너리 지수를 가져라.

그런 다음 바이어스를 빼서 빼십시오.

관련 문제