2017-01-31 13 views
1

내가 공식에 대한 고정 소수점 값을 계산해야합니다 고정 소수점 변환 : 31 ... 23 지수가 Q25 값의 분수가 23입니까?

e^(Konst/x*y)

내가 제 3 자에게 divide()antilog() 기능과 같이 사용

div = divide(Konst, x*y); 
out = antilog(div); 

divide() 출력
에 제공 bits 23…0 fractional part (실제로는 Q0.31 시프트시 << 8)

bits 31…24 exponent.

antilog()은 입력시에 Q6.25 값이 필요합니다.

antilog()에 의미있는 것을 어떻게 먹이면 Q6.25 형식이 될까요?
이 경우 특정 형식에서 다른 형식으로 이동하려면 어떻게해야합니까?

p.s. divide이 크기 조정없이 Q6.25에 맞지 않는 매우 큰 출력을 제공하면 어떻게됩니까? 이 경우 e^(scale*Q6.25)하는 방법?

+0

Q6.25 란 무엇입니까? Google 결과 없음 –

+0

@PaulOgilvie : 32 비트 고정 소수점 값 (-64.0, +64.0) – MSalters

+0

@ PaulOgilvie https://en.wikipedia.org/wiki/Q_(number_format)를 확인하십시오. – Danijel

답변

0

는 "23 ... 0 소수 부분을 (< < 8 이동 때이 사실 Q0.31 형식으로되어 비트" 음, 요점은 당신이 8로 이동하지만, 지수 부분에 의해 (비트 31가 없다는 것입니다. .24) 지수가 거의 확실 바이어스합니다,... 00000000 <<0 그러나 아마 >>127 정도를 지수입니다하지 않는 비트() 문서를 확인

를 SO, 바이어스 빼기, Q6.25 또 다른 6 빼기, 시프트

+0

편향되지 않았습니다. '이 루틴은 Q31 형식으로 작성된 벡터의 나누기를 수행합니다. 나누기 결과의 분수 및 지수 부분을 반환합니다. 분열은 1보다 큰 결과를 생성 할 수 있으므로 분수 부분 frac을 Q (31-exp) 형식 및 지수 exp로 반환하므로 분수 부분을 지수 값만큼 왼쪽으로 시프트하면 Q0.31의 실제 나누기 결과를 찾을 수 있습니다. ' – Danijel

+0

"Q6.25에 대해 다른 6을 뺀 다음 교대"에 대해 조금 더 자세히 설명해 주시겠습니까? 빼는 것은 무엇이며, 무엇이 바뀌는가? 예제가 도움이 될 것입니다 ... – Danijel

+0

@Danijel : 고정 소수점 및 부동 소수점 형식을 더 잘 읽어야합니다. Q6.25 및 Q4.27에서 FP 형식으로 '2.0'값을 나타내는 방법을 고려하십시오. FP 지수는 '2^exp'에 의한 곱셈을 의미합니다. 그리고 2의 제곱에 의한 곱셈은 비트 시프트입니다. 그러므로'* 2^exp'는'<< exp'와 같습니다. 양쪽에서 떨어지는 비트를 무시하면 '< b>는'a-b'가'a> b '이거나''b-a''가된다. – MSalters