doubleの精度の処理

このトピックでは、EQL結果のdoubleのシリアライズ機能の精度の制限に関する情報を提供します。

浮動小数点数の特性として、内部のdoubleをそのdoubleの文字列表現に変換し、再度戻すと、そのEQLは完全な精度を保証できません。特に、数値の10進数桁数が15を超える場合、double-文字列-doubleの往復変換を行うと精度が失われ、開始時と異なる数値が取得されます。(これは桁の合計数であり、必ずしも小数点の後の桁ではありません。)

原則として、10進数桁数は様々な実装要因に依存しますが、実際には変更されることはほとんどありません。(より技術的に言えば、EQLでIEEE 754 64ビットの浮動小数点数が使用されるかぎり、その制限は同じ値に留まります。)

したがって、StudioなどのクライアントがEQL問合せの結果からdoubleを取得し、絞込みフィルタでそのdoubleを使用して新規問合せを送信すると、数値自体が15桁を超える10進数桁数の表示が必要である場合、有効な値が返されることが期待できません。この動作が必要な場合、絞込みフィルタをそのフォームのEQLフィルタで置き換えることを検討してください。
x BETWEEN (dblVal - epsilon) AND (dblVal + epsilon)
この場合のdblValは前の問合せの値であり、epsilonは、レコードが一致する必要がある許容度を示す小さい正の数値です。

同様に、クライアントが範囲フィルタのエンド・ポイントとしてEQL結果からのdoubleを使用する場合、クライアントは、小さい許容度によって範囲の調整を行う必要がある場合があります。