● 小数点以下の計算
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倍して小数点を移動すれば、小数点以下の値を何桁でも得る事ができますが、倍率も一緒に計算される事に注意が必要です。変数の大きさが十分でないと、計算中にオーバーフローします。