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

固定小数点概観
ホーム ] 上へ ] Intel SSE ] [ 固定小数点概観 ] Athlonの実数演算 ] 緑青 ]

 

概説
固定小数点 除算
FixedPoint Tool
Round2に挑戦

まずは、以下のコードを実行してみてください。
コメントに示したような結果が得られます。

#include <windows.h>
#include <math.h>
#include <stdio.h>
main()
{
    int         a=0x60000000;    // e=3 f=0x0.110 0000        :3.0
    int        b=0x40000000;     // e=3 f=0x0.100 0000        :2.0
    int        c;    // 0x18000000  e=6 f=0x0.001 1000        :6.0
    char    buf[80];

    _asm {
        mov         eax,a
        imul         b
        mov         c,edx
    }

    sprintf(buf,"%8x %8x %8x",a,b,c);
    MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

少し考察してみましょう。

    a=0x60000000;    // e=3 f=0x0.110 0000        :3.0
    b=0x40000000;    // e=3 f=0x0.100 0000         :2.0
    c;    // 0x18000000  e=6 f=0x0.001 1000         :6.0

についてですが、eは指数部(小数点の位置)を示し、f は2進数で仮数部を表したものです。
eの値も仮数部の小数点位置も概念的なものです。

e=3 f=0x0.110 は実際には0x011.0=3.0 であることを示します。

そして掛け算の結果小数点位置は3+3=6の位置に移り

e=6 f=0x0.0011000 つまり 0x000110.00=6.0 となります。