0

エンジニアリング計算にIEEE754浮動小数点演算(NaNおよびInfsを使用)を使用したいセーフティクリティカルな組み込みプログラム(C)に取り組んでいます。ここでは、浮動小数点の例外を処理するための2つのアプローチ(afaik)があります。

  • 例外が発生した場合は、永続的な障害状態になります。これは、エラー検出の観点からはより堅牢である可能性がありますが、フォールトトレランス/可用性には適していません。
  • 例外を無視し、それらが有限数(完全な計算に成功)またはNaN、inf(失敗した計算)であるかどうかの最終結果を確認します。このソリューションはフォールトトレラントですが、出力が誤ってチェックから除外される可能性があるため、リスクが高くなります。

    1. セーフティクリティカルシステムでより良い解決策はどれですか?
    2. 他に選択肢はありますか?
    3. 計算の複雑さが最初の解決策を許可しない場合(通常の使用法では例外を回避できません)、最終チェックは十分ですか、それとも考慮すべき他の側面がありますか?
4

1 に答える 1

1
  1. セーフティクリティカルシステムでどちらが優れているかはシステムによって異なり、詳細情報がないと答えられません。

  2. もう1つのオプションは、望ましくない動作が発生しないように(または、必要に応じて処理できるように)浮動小数点コードを設計し、その証明を作成することです。

  3. 一般に、最終値をチェックすることは、計算中に例外または他のエラーが発生したかどうかを検出するには不十分です。

3に関しては、その後の操作でさまざまな例外的な結果がなくなる可能性があることを考慮してください。除数として使用すると、無限大はゼロを生成できます。NaNは、最小または最大の一部の実装で消滅します。(たとえば、max(3, NaN)NaNではなく3を生成する場合があります。)コードを分析すると、特定の計算でこれらのことが可能かどうかが明らかになる場合があります(またはできない場合があります)。

ただし、最終値をチェックする代わりに、例外フラグをチェックすることもできます。IEEE 754のほとんどの実装には累積フラグがあります。例外が発生すると、そのフラグが立てられ、明示的にリセットされるまで上げられたままになります。したがって、計算の開始時にフラグをクリアし、終了時にフラグをテストできます。これにより、最終値のテストとは異なり、例外が発生した後に例外が発生することが保証されます。

于 2012-10-18T23:42:43.257 に答える