Macros for fx32 Type

# fx32 Type Macros

## Description

`FX32_SHIFT` | Defines the shift number (12) for `fx32` types.
`FX32_INT_SIZE` | Defines the bit width of the integer portion (19) for `fx32` types.
`FX32_DEC_SIZE` | Defines the bit width for the decimal portion (12) for `fx32` types.
`FX32_INT_MASK` | Defines the mask (`0x7ffff000`) for the integer portion of `fx32` types.
`FX32_DEC_MASK` | Defines the mask (`0x0fff`) for the decimal portion of `fx32` types.
`FX32_SIGN_MASK` | Defines the mask (`0x80000000`) for the sign portion of `fx32` types.
`FX32_MAX` | Defines the maximum value (`0x7fffffff`) that can be obtained with `fx32` types.
`FX32_MIN` | Defines the minimum value (`0x80000000`) that can be obtained with `fx32` types.
`FX_MUL` | Multiplies two `fx32` types.
`FX_MUL32x64C` | Multiplies an `fx32` type and an `fx64c` type.
`FX_FX32_TO_F32` | Converts an `fx32` type to an `f32` type.
`FX_F32_TO_FX32 FX32_CONST` | Converts an `f32` type to an `fx32` type.

## Macro Definitions

    #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)

## Revision History

10/19/2004 Corrected macro formulas.
02/25/2004 Initial version.