가장 정확한 PS1 모양을 얻으려면 소프트웨어 렌더러가있는 게임을하고 있습니다. PS1 그래픽/렌더링 시스템이 어떻게 작동했는지, 왜곡 된 꼭지점 등의 이유에 대한 연구를하면서, 나는 그들이 분열 한 방식에 관한 문서를 보았습니다. 여기에 대한 링크입니다 : http://problemkaputt.de/psx-spx.htm#gteoverview (참조는 "GTE 부문 부정확"섹션)이 부문 근사 알고리즘은 어떻게 작동합니까?
관련 코드 :
if (H < SZ3*2) then ;check if overflow
z = count_leading_zeroes(SZ3) ;z=0..0Fh (for 16bit SZ3)
n = (H SHL z) ;n=0..7FFF8000h
d = (SZ3 SHL z) ;d=8000h..FFFFh
u = unr_table[(d-7FC0h) SHR 7] + 101h ;u=200h..101h
d = ((2000080h - (d * u)) SHR 8) ;d=10000h..0FF01h
d = ((0000080h + (d * u)) SHR 8) ;d=20000h..10000h
n = min(1FFFFh, (((n*d) + 8000h) SHR 16)) ;n=0..1FFFFh
else n = 1FFFFh, FLAG.Bit17=1, FLAG.Bit31=1 ;n=1FFFFh plus overflow flag
나는 이것이 어떻게 작동하는지 이해하기 힘든 시간을 보내고있어,이 'UNR 것입니다 '테이블? 왜 우리가 물건을 바꾼거야? 누군가이 물건이 실제로 어떻게 나누기를 달성하는지에 관해 더 자세한 설명을 줄 수 있다면, 그것은 인정 될 것입니다.
시도해보십시오. http://codereview.stackexchange.com/ – OldProgrammer
[Newton-Raphson division] (https://en.wikipedia.org/wiki/Division_algorithm#Newton.E2.80.93Raphson_division) (위키 백과 링크)을 구현합니다. –
@OldProgrammer이 질문은 코드 검토에 대한 주제와는 거리가 멀며, 코드 검토는 '코드 설명'또는 '왜/어떻게 작동합니까?' –