● fixed X ユーティリティー - 関数リファレンス
階乗
int __stdcall fixedutil_fact(PFIXEDVAL px ,PFIXEDVAL pres ,int width ,PFIXEDVAL pworkarea );
引数
引数名 | 意味 |
px | 対象の値が格納されている FIXEDVAL領域の先頭アドレス |
pres | 結果を格納する FIXEDVAL領域の先頭アドレス |
width | px 、pres の指す FIXEDVAL値の数値幅(バイト単位) |
pworkarea | 関数が使用するワークエリアを指す FIXEDVAL領域の先頭アドレス |
ワークエリアに必要なサイズ | … | width × 6 以上のサイズが必要 |
戻り値
正常終了した場合は STATUS_NORMAL 、x に負の値を指定した場合は STATUS_ILLEGALFUNCTIONCALL 、オーバーフローした場合は STATUS_RANGEOVER を返します。
説明
x! を signed で計算し、結果を pres の指す領域へ格納します。x はゼロ以上の値である必要があります。
引数 px 、pres の指す領域は、width が示す数値幅以上のサイズを持っている必要があり、width は 4 の倍数である必要があります。
例.順列
#include "fixedX.h"
#include "fixutil.h"
int permutation(PFIXEDVAL n,PFIXEDVAL r,PFIXEDVAL pres)
{
FIXEDVAL temp[SIZE],rem[SIZE];
FIXEDVAL work[SIZE * 6];
memcpy(temp,n,SIZE);
fixed_sub(temp,r,SIZE);
if (fixedutil_fact(temp,temp,SIZE,work) != STATUS_NORMAL ||
fixedutil_fact(n,pres,SIZE,work) != STATUS_NORMAL)
return 0;
fixed_div(pres,temp,rem,SIZE);
return 1;
}