● 計算
比較
比較関数は、リファレンスの「比較・分類」を参照してください。
FLOATEX 型変数の比較には、通常 floatex_comp を使用します。
floatex_comp(x , y )
戻り値
x > y の時 ... 1
x = y の時 ... 0
x < y の時 ... -1
戻り値は、標準ライブラリの memcmp 、strcmp に似ています。
一致/不一致検査の注意点
浮動小数点演算では、理論的には一致していても、演算誤差等で完全には一致しない値になってしまうケースがあります。floatex_comp が 0 を返す条件は完全一致なので、実用上はほとんど一致と見なせる誤差であっても不一致として扱われてしまいます。
/*
x が 30 、y が 29.99999999 の時、y を 30 と見なして
も良い仕様であっても、次の処理では不一致となってしまう
*/
if (!floatex_comp(x , y )){
一致している場合の処理
}
この場合は、「x 、y の差の絶対値が、ゼロと見なせる値よりも小さい場合は真とする」という形にする必要があります。
FLOATEX t;
/* if (fabs(x - y ) < ゼロと見なせる値) ... */
floatex_abs(floatex_esub(x , y , t));
if (floatex_comp(t,ゼロと見なせる値) < 0){
一致している場合の処理
}
値がゼロであるかを調べる時も同様です。val の絶対値をゼロと見なせる値で比較します。
FLOATEX t;
floatex_eabs(val , t));
if (floatex_comp(t,ゼロと見なせる値) < 0){
ゼロ場合の処理
}