私は最も正確な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)(Wikipediaのリンク)を実装しています。 –
@OldProgrammerこの質問は、Code Reviewのトピックではないので、コードレビューでは「コードの説明」や「なぜ/どのようにこれが機能するのですか」はありません。 –