● 小数点以下の計算

fixed X で小数点以下まで結果を出す場合は、値を 10n倍し、小数点の位置を変えます。

例えば、23527 ÷ 732 は 32.14071038...となりますが、fixed X で直に計算すると、小数点以下を切り捨てた 32 が結果として返されます。
この計算を 106倍してから行います。

    23527 × 106 ÷ 732  →  32140710
             ↑
   小数点を右に 6 桁分移動


例.

#include <stdio.h>
#include "fixedX.h"
#include "fixutil.h"

#define BIT         128
#define SIZE        (BIT / 8)

void    main(void )
{
    FIXEDVAL        a[SIZE],b[SIZE * 2],work[SIZE];
    unsigned long   rem;
    char            buf[256+1];

    fixedutil_setulval32(a,SIZE,23527);

    fixed_mul32(a,1000000UL,b,SIZE); /* 23527 * 10^6 */
    fixed_div32(b,732,&rem,SIZE);    /* 23527 * 10^6 / 732 */

    fixedutil_unsigned_num2str(b,SIZE,10,buf,work);
    printf("%s\n",buf);
}
このように、10n倍して小数点を移動すれば、小数点以下の値を何桁でも得る事ができますが、倍率も一緒に計算される事に注意が必要です。変数の大きさが十分でないと、計算中にオーバーフローします。