# fx32型用のマクロ

## 説明

FX32_SHIFT | fx32型のためのシフト数(12)が定義されています。
FX32_INT_SIZE | fx32型の整数部分のビット幅(19)が定義されています。
FX32_DEC_SIZE | fx32型の小数部分のビット幅(12)が定義されています。
FX32_INT_MASK | fx32型の整数部分のマスク(0x7ffff000)が定義されています。
FX32_DEC_MASK | fx32型の小数部分のマスク(0x0fff)が定義されています。
FX32_SIGN_MASK | fx32型の符号部分のマスク(0x80000000)が定義されています。
FX32_MAX | fx32型が取りうる最大値(0x7fffffff)が定義されています。
FX32_MIN | fx32型が取りうる最小値(0x80000000)が定義されています。
FX_MUL | fx32型同士の乗算マクロです。
FX_MUL32x64C | fx32型とfx64c型の乗算マクロです。
FX_FX32_TO_F32 | fx32型をf32型に変換します。
FX_F32_TO_FX32 FX32_CONST | f32型をfx32型に変換します。

## マクロの定義

    #define FX32_SHIFT          12
    #define FX32_INT_SIZE       19
    #define FX32_DEC_SIZE       12

    #define FX32_INT_MASK       0x7ffff000
    #define FX32_DEC_MASK       0x00000fff
    #define FX32_SIGN_MASK      0x80000000

    #define FX32_MAX            (fx32)(0x7fffffff)
    #define FX32_MIN            (fx32)(0x80000000)

    #define FX_MUL(v1, v2)       ((fx32)(((fx64)(v1) * (v2) + 0x800LL) >> FX32_SHIFT))
    #define FX_MUL32x64C(v1, v2) ((fx32)(((v2) * (v1) + 0x80000000LL) >> 32))

    #define FX_FX32_TO_F32(x)    ((f32)((x) / (f32)(1 << FX32_SHIFT)))
    #define FX_F32_TO_FX32(x)    ((fx32)(((x) > 0) ? \
                                                       ((x) * (1 << FX32_SHIFT) + 0.5f ) : \
                                                       ((x) * (1 << FX32_SHIFT) - 0.5f )))

    #define FX32_CONST(x)        FX_F32_TO_FX32(x)

## 履歴

Ver. 2004/02/25