2

ここには、多くの計算を伴うかなり複雑なプロジェクトがあります。結果がである場合がありNaNます。計算には多くのクラスが関係しているため(そしてNaNはゾンビのように広がる傾向があるため)、起源を特定するのは困難です。

今、私は疑問に思っています、Eclipseデバッガーに実行を停止させる方法を知っている人はいNaNますか?Javaはで例外を自動的に発生させることをサポートしていないのでNaN、それは難しいでしょうが、おそらくそれは行われていて、私はそれを見逃していますか?

ありがとう、アクセル

PS:に条件付きブレークポイント(またはifステートメント)を追加できることは知ってDouble.isNaN(value)いますが、多くの場所で追加する必要があります。(実際、これは私が今やろうとしていることです。)もっと良い代替案があるかどうか疑問に思っています。

4

2 に答える 2

2

今、私は疑問に思っています、Eclipseデバッガーの実行を停止させる方法を知っている人はNaNにヒットしますか?

疑わしい。

通常のJavaの動作では、NaNが表示されたときに例外がスローされないため、デバッガーは、例外を生成する可能性のある各ステートメントに条件付きブレークポイントを挿入する必要があります。これは実装が複雑になり、実行時にコストがかかります。そして、あなたのユースケースはかなり珍しいものです。

より良いアプローチは、いくつかの適切に選択された場所でコードにJavaアサーションを追加することかもしれないと思います。

于 2011-03-02T09:33:11.517 に答える
0

もっと簡単な方法はないと思います。

余談ですが、完全なIEEE-754(2008)標準には、「例外処理」メカニズムがあります(これは、Java / C#などの例外とは関係ありません)。5つの例外があります:

  1. 無効な操作
  2. ゼロ除算
  3. オーバーフロー
  4. アンダーフロー
  5. 不正確な結果

仕様には、これらの各例外に対するデフォルトの例外処理戦略もあります。これは次のとおりです。

  1. NaNに置き換えます
  2. (適切に署名された)無限大に置き換えます
  3. (適切に署名された)無限大に置き換えます
  4. 無視
  5. 無視

この標準では、ユーザーがこれらのデフォルトを、別の例外処理戦略(いくつか提供されています)、またはカスタム言語固有の戦略(Javaで例外をスローするなど)でオーバーライドできることも推奨しています。

残念ながら、ほとんどすべての現代言語は仕様のこの部分を完全に無視しており、デフォルトの例外処理戦略は「十分」であると想定しています。

于 2011-03-02T09:46:18.617 に答える