● 関数リファレンス
ゼロを検索
FLOATEX_TBLPTR __stdcall floatex_searchzero(FLOATEX_TBLPTR val_tbl,int n,PFLOATEX pnearlyzero);
引数
引数名 | 意味 |
val_tbl | 数値群を格納している FLOATEX型配列のアドレス |
n | val_tbl に指定する配列の要素数 |
pnearlyzero | ゼロと見なせる値を格納している FLOATEX型変数の先頭アドレス(NULL指定可) |
戻り値
発見した場所のアドレスを返します。発見できなかった場合や、n ≦ 0 の場合は NULL を返します。
説明
val_tbl が指す配列の中から 0 の要素を検索します。
検索順は配列の下位から上位側に向かって行われます。比較は絶対値で行われ、0 を発見すると処理を停止します。
0 の要素が複数個ある場合は、開始位置 val_tbl に最も近い要素を発見します。
0 との比較には、pnearlyzero が指す値が使用されます。対象の値が nearlyzero 以下の場合は 0 と見なされます。
pnearlyzero が NULL の場合は、0 との比較(完全なゼロとの比較)が行われます。
この関数は、配列内のデータが正常値である事が前提となっています。NaN 等が配列内に入る可能性がある場合は、事前にチェックを行ってください。
例.
#include <stdio.h>
#include "floatex.h"
void main(void)
{
FLOATEX_TBLPTR ptr;
FLOATEX val[10],nearlyzero;
char buf[32];
unsigned int oldcw;
oldcw = floatex_storecw();
floatex_loadcw(FEX_MCW_EM | FEX_PC_64 | FEX_RC_NEAR);
/* 10 要素の配列の中から 0 を検索します */
floatex_copy(val[0],fex_const_9);
floatex_copy(val[1],fex_const_8);
floatex_copy(val[2],fex_const_7);
floatex_copy(val[3],fex_const_6);
floatex_copy(val[4],fex_const_5);
floatex_copy(val[5],fex_const_4);
floatex_copy(val[6],fex_const_3);
floatex_copy(val[7],fex_const_2);
floatex_copy(val[8],fex_const_1);
floatex_copy(val[9],fex_const_0);
floatex_doubleto(1e-6,nearlyzero);
if ((ptr = floatex_searchzero(
val,sizeof(val) / sizeof(FLOATEX),nearlyzero)) != NULL)
{
floatex_ldstr_ldtoa(*ptr,buf);
printf("発見 index : %d val : %s\n",ptr - val,buf);
floatex_ldstr_term();
}else
printf("見つからなかったか、エラーが発生\n");
floatex_loadcw(oldcw);
}