● fixed X ユーティリティー - 関数リファレンス

階乗

    int __stdcall   fixedutil_fact(PFIXEDVAL px ,PFIXEDVAL pres ,int width ,PFIXEDVAL pworkarea );

引数

引数名意味
px対象の値が格納されている FIXEDVAL領域の先頭アドレス
pres結果を格納する FIXEDVAL領域の先頭アドレス
widthpxpres の指す FIXEDVAL値の数値幅(バイト単位)
pworkarea関数が使用するワークエリアを指す FIXEDVAL領域の先頭アドレス

ワークエリアに必要なサイズwidth × 6 以上のサイズが必要

戻り値

正常終了した場合は STATUS_NORMAL 、x に負の値を指定した場合は STATUS_ILLEGALFUNCTIONCALL 、オーバーフローした場合は STATUS_RANGEOVER を返します。

説明

x! を signed で計算し、結果を pres の指す領域へ格納します。x はゼロ以上の値である必要があります。


引数 pxpres の指す領域は、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;
}