● 関数リファレンス

ゼロを検索

    FLOATEX_TBLPTR __stdcall    floatex_searchzero(FLOATEX_TBLPTR val_tbl,int n,PFLOATEX pnearlyzero);

引数

引数名意味
val_tbl数値群を格納している FLOATEX型配列のアドレス
nval_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);
}