● 関数リファレンス
テーブルから指定の種類を検索する
FLOATEX_TBLPTR __stdcall floatex_checktable(FLOATEX_TBLPTR val_tbl,int n,unsigned int type);
引数
引数名 | 意味 |
val_tbl | 数値群を格納している FLOATEX型配列の先頭アドレス |
n | val_tbl に指定する配列の要素数 |
type | 検索するデータの種類 |
戻り値
発見した場合は、そのアドレスを返します。見つからなかった場合は NULL を返します。
説明
val_tbl が指す配列から、指定の種類のデータを検索します。
type には、次の値を単独、または OR 接合で指定します。
値 | 意味 |
FEX_CHKTBL_P_UNSUPPORT | + の未サポートフォーマット |
FEX_CHKTBL_M_UNSUPPORT | - の未サポートフォーマット |
FEX_CHKTBL_P_QNAN | + のクワイエット型 NaN |
FEX_CHKTBL_M_QNAN | - のクワイエット型 NaN |
FEX_CHKTBL_P_SNAN | + のシグナル型 NaN |
FEX_CHKTBL_M_SNAN | - のシグナル型 NaN |
FEX_CHKTBL_P_NORMAL | + のノーマル数 |
FEX_CHKTBL_M_NORMAL | - のノーマル数 |
FEX_CHKTBL_P_INFINITY | + の無限大 |
FEX_CHKTBL_M_INFINITY | - の無限大 |
FEX_CHKTBL_P_ZERO | + の0 |
FEX_CHKTBL_M_ZERO | - の0 |
FEX_CHKTBL_P_DENORMAL | + のデノーマル数 |
FEX_CHKTBL_M_DENORMAL | - のデノーマル数 |
検索は val_tbl から上位側へ向かって行われます。配列内に該当するデータが複数存在する場合は、val_tbl に最も近い要素が返されます。
n ≦ 0 の場合は、処理を行わず NULL を返して終了します。
テスト.
#include <stdio.h>
#include "floatex.h"
/* 配列内にある正のノーマル値を全て表示します */
void search_all_values(FLOATEX_TBLPTR porg,int max)
{
FLOATEX_TBLPTR ptr;
int cnt,index;
char buf[32];
cnt = max--;
ptr = porg;
while((ptr = floatex_checktable(ptr,cnt,FEX_CHKTBL_P_NORMAL)) != NULL){
index = ptr - porg;
floatex_ldstr_ldtoa(*ptr,buf);
printf("インデックス:%2d 内容:%s\n",index,buf);
ptr++;
cnt = max - index;
}
}
void __cdecl main(void)
{
FLOATEX v[32] = {0};
unsigned int oldcw;
oldcw = floatex_storecw();
floatex_loadcw(FEX_PC_64 | FEX_RC_NEAR | FEX_MCW_EM);
/* 正の値のセット */
floatex_copy(v[0],fex_const_1);
floatex_copy(v[2],fex_const_2);
floatex_copy(v[14],fex_const_3);
floatex_copy(v[31],fex_const_4);
/* 負の値のセット */
floatex_nabs(floatex_copy(v[8],fex_const_5));
floatex_nabs(floatex_copy(v[11],fex_const_6));
floatex_nabs(floatex_copy(v[26],fex_const_7));
/* 内容の検索と表示 */
search_all_values(v,sizeof(v) / sizeof(FLOATEX));
floatex_ldstr_term();
floatex_loadcw(oldcw);
}
結果.
インデックス: 0 内容:1
インデックス: 2 内容:2
インデックス:14 内容:3
インデックス:31 内容:4