アットウィキロゴ

Fixed Point Arithmetic

固定小数点計算について

シミュレーション上の全計算で、16bitの小数部を考慮する。
また、最大10bit長のInteger部も持つ。


整数の除算は0方向にまるめられる。
例えば、

8/3 = (-8)/(-3) = 2
(-8)/3 = 8/(-3) = -2

<<は左シフト、>>は右シフト。
固定小数点における加算、減算、否定、!=は普通の整数のそれと同じく実装する。
固定小数点の乗算(mul)と除算(div)は次の様に定義出来る。

mul (x, y) { return (x * y) >> 16 }
div (x, y) { return (x << 16) / y }

"/"が入っている事からも整数だと思うんだけど、この引数はどうなってるんだろう・・・。
26bit長なのかなー。


32bit長ではこれらの演算を実装するのに十分ではない事に注意。(なんだってー??


もうちょっと下にすると
pi = 205887
という式が出てくる。
これは何なのかという事。

まず2進数にする
pi2 = 110010010000111111
これの下位16bitを10進数にすると9279
fractionの部分では1未満も数を表したいので、この9279を(1<<16)=65536で割る。
すると
pifrac = 0.141586303710938
となる。
Integer部はそのまま3なので、3.1415...となる事が分かる。


ただ、pi/2がなぜ102943にならないのかpi*2がなぜ411774にならないのか、という疑問が残る。
最終更新:2008年05月30日 02:21