ホーム 道しるべ 憩いの広場 濃緑空間 濃緑研の日記

概説
ホーム ] 上へ ] [ 概説 ] 固定小数点 除算 ] FixedPoint Tool ] Round2に挑戦 ]

 

概説。。。。。そんなだいそれたものではないです。

原理的な話を少し。

bullet掛け算
imul    eax,ebx
a*bです、多くの方は結果はeaxに格納されるものを使用されるでしょう。
コンパイラの吐き出すコードもそうです。
でも、本当の結果はedxとeaxに格納されるんです。

何故か?、32ビット*32ビットの結果を格納するのには64ビット必要だからです。
ただ通常結果も32ビット整数に受け取りますし、結果が32ビットを越えるような掛け算は、整数演算の世界ではあまり利用しないでしょう。

しかし、固定小数点の世界では、このedxに大いに活躍してもらわなければなりません。

整数とは言っても所詮第0ビットの重みが1で第1ビットの重みが2、さらに左のビットの重みが4,8,16.....という重みで考えているだけで、実際の演算器はそんなことおかまいなしなんです。0と1のビット列の加減乗除を行っているだけです。

そう考えれば、極端な話、第30ビットの重みは0.5(2^-1)、第29ビットの重みは0.25(2^-2)としてビット列を扱ったっていいんです。

でもそのように、小数点の位置があたかも第30ビットの前にあるように考えた0.5なんですが、整数演算器にとっては単に0x40000000というビット列にすぎません。

以下、工事中。しばらくお待ち下さい