ほとんどの言語には、次または前の単精度 (32 ビット) または倍精度 (64 ビット) の数値を取得するための組み込み関数またはライブラリ関数があります。
32 ビットおよび 64 ビットの浮動小数点演算を使用するユーザーにとって、基本的な構造を十分に理解しておくと、それらの危険を回避するのに非常に役立ちます。IEEE 標準は一様に適用されますが、多くの詳細は実装者に委ねられています。したがって、機械語表現のビット操作に基づくプラットフォーム ユニバーサル ソリューションには問題があり、エンディアンなどの問題に依存する可能性があります。ビット レベルでどのように機能するか、または機能する必要があるかについての詳細をすべて理解することは、知的能力を実証する可能性がありますが、各プラットフォームに合わせて調整され、サポートされているプラットフォーム全体でユニバーサル API を備えた組み込みまたはライブラリ ソリューションを使用することをお勧めします。
C# と C++ のソリューションに気付きました。Java の場合は次のとおりです。
Math.nextUp:
public static double nextUp(double d):
- 正の無限大方向で d に隣接する浮動小数点値を返します。このメソッドは、意味的には nextAfter(d, Double.POSITIVE_INFINITY); と同等です。ただし、nextUp 実装は、同等の nextAfter 呼び出しよりも高速に実行される場合があります。
特殊なケース:
- 引数が NaN の場合、結果は NaN になります。
- 引数が正の無限大の場合、結果は正の無限大になります。
- 引数がゼロの場合、結果は Double.MIN_VALUE です。
パラメーター:
戻り値:
public static float nextUp(float f):
- 正の無限大方向で f に隣接する浮動小数点値を返します。このメソッドは、意味的には nextAfter(f, Float.POSITIVE_INFINITY); と同等です。ただし、nextUp 実装は、同等の nextAfter 呼び出しよりも高速に実行される場合があります。
特殊なケース:
- 引数が NaN の場合、結果は NaN になります。
- 引数が正の無限大の場合、結果は正の無限大になります。
- 引数がゼロの場合、結果は Float.MIN_VALUE になります。
パラメーター:
戻り値:
次の 2 つは、使用するのが少し複雑です。ただし、ゼロに向かう方向、または正または負の無限に向かう方向は、より可能性が高く有用な用途のようです。もう 1 つの用途は、2 つの値の間に中間値が存在することを確認することです。ループとカウンターを使用して、2 つの値の間にいくつ存在するかを判断できます。また、nextUp メソッドとともに、for ループでのインクリメント/デクリメントにも役立つようです。
Math.nextAfter:
public static double nextAfter(二重開始、二重方向)
- 2 番目の引数の方向で最初の引数に隣接する浮動小数点数を返します。両方の引数を比較して等しい場合、2 番目の引数が返されます。
特殊なケース:
- いずれかの引数が NaN の場合、NaN が返されます。
- 両方の引数が符号付きゼロの場合、方向は変更されずに返されます (引数が等しい場合に 2 番目の引数を返すという要件によって暗示されているように)。
- start が ±Double.MIN_VALUE で、方向の値が結果のマグニチュードが小さくなるような値の場合、start と同じ符号のゼロが返されます。
- start が無限大で、方向が結果のマグニチュードが小さくなるような値を持つ場合、start と同じ符号を持つ Double.MAX_VALUE が返されます。
- start が ± Double.MAX_VALUE に等しく、結果がより大きな大きさを持つような値が direction にある場合、start と同じ符号の無限大が返されます。
パラメーター:
- start - 浮動小数点値の開始
- direction - 開始の隣接または開始のどちらを返す必要があるかを示す値
戻り値:
- direction の方向で start に隣接する浮動小数点数。
public static float nextAfter(float 開始、二重方向)
- 2 番目の引数の方向で最初の引数に隣接する浮動小数点数を返します。両方の引数を比較して等しい場合、2 番目の引数と同等の値が返されます。
特殊なケース:
- いずれかの引数が NaN の場合、NaN が返されます。
- 両方の引数が符号付きゼロの場合、方向と同等の値が返されます。
- start が ±Float.MIN_VALUE で、方向の値が結果のマグニチュードが小さくなるような値の場合、start と同じ符号のゼロが返されます。
- start が無限大で、方向の値が結果のマグニチュードが小さくなるような値の場合、start と同じ符号の Float.MAX_VALUE が返されます。
- start が ± Float.MAX_VALUE に等しく、方向の値が結果のマグニチュードが大きくなるような値の場合、start と同じ符号の無限大が返されます。
パラメーター:
- start - 浮動小数点値の開始
- direction - 開始の隣接または開始のどちらを返す必要があるかを示す値
戻り値:
- direction の方向で start に隣接する浮動小数点数。