適切に実装された浮動小数点で単一の演算を実行し、丸めモードが最も近い値に丸める (最も一般的な) 場合、誤差は最大で表現可能な数値間の距離の半分です。これは、最も近い値に丸めるモードでは、演算が正確な数学的結果に最も近い表現可能な結果を返すためです。(これを「正丸め」といいます。)
これには、数値 (「0.000001」や「1e-5」など) を浮動小数点に変換するなどの操作が含まれます。ただし、一部の演算、特に正弦や対数などの複雑な演算のライブラリ ルーチンでは、通常、正しく丸められた結果が返されるとは限りません (そうするのが難しいため)。したがって、誤差範囲に依存する前に、実装の仕様を確認する必要があります。
32 ビット IEEE 754 浮動小数点は、符号ビット、8 つの指数ビット (-126 から 127 までの [2 の] 通常の指数を表す)、および 23 の明示的な仮数ビットを使用します。(適切な用語は仮数です。仮数は対数の小数部分です。) 完全な仮数は 24 ビットを持ちます。これは、暗黙的な先行 1 があるためです (大きさが 2 -126未満の非正規数を除く)。したがって、表現可能な数値と次に高い表現可能な数値との間の距離は、先頭の 1 ビットの値の 2 ~23倍になります。もちろん、その値は、数値より大きくない最大の 2 の累乗です。(たとえば、5 の場合、先行ビットの値は 4 であるため、最下位ビットの値は 4•2 -23 = 2 -21です。. したがって、1 回の演算の正確な数学的結果が約 5 である場合、最大誤差は 2 -22になります。)
複数の操作を実行する場合、エラーは実行される操作と関連する値に大きく依存します。エラー境界を決定するには、慎重な分析を実行する必要があります。操作によっては、誤差が結合して拡大し、誤差が無限大になることさえあります。
0.000001 を 100,000 回追加しようとすると、2 種類のエラーが発生することに注意してください。まず、0.000001 は 2 進浮動小数点では正確に表現できないため、その数値を浮動小数点に変換する操作でエラーが発生します。第 2 に、加算ごとに丸め誤差が発生する可能性があります。
また、異なるプロセスで同一の情報を維持することにも言及しています。これは、重複していますが、境界エラーとは別の問題です。プロセスが同一のプラットフォームで実行されている場合、同一のハードウェアとライブラリを使用して、同一のデータで同一の操作をすべてのプロセスに実行させることにより、同期を維持することは難しくありません。これは、浮動小数点エラーが通常ランダムではないためです。同じデータに対して同じ操作を実行すると、常に同じ結果が返されます。(ハードウェアまたはライブラリの動作が完全に指定されておらず、関係のないデータに依存することが許可されている場合、問題が発生する可能性がありますが、これは実際の問題よりも理論的な問題になる傾向があります。) 同一のプラットフォームは完全に同一であることを意味することに注意してください。
プロセスが異なるプラットフォームで実行されている場合、同期を維持するのが難しい場合があります。同一のソースからコンパイルされたソフトウェアで実行している場合でも、コンパイラは浮動小数点演算のさまざまな選択肢を使用して高水準言語を実装する場合があります。最も悪名高いのは、一部の言語で許可されている高水準言語が必要とするよりも高い精度を使用することです。
IEEE 754-2008 標準の第 11 項には、再現可能な浮動小数点の結果の生成に関する情報が含まれています。コンピューティング プラットフォームは、これをサポートするために必要な保証を提供しない場合があります。