2

私は、ユーザーが独自の数学関数を定義して画像を生成できるようにする手続き型画像生成用のライブラリ( Clisk )を作成しています。

一部のピクセルでゼロ除算が発生する可能性のある関数を定義することは明らかに可能です。例:(擬似コード)

red = 1.0 / (xposition - 0.5)

これにより、xposition = 0.5(画像の中央)の場合は常にゼロ除算になります。

理想的には、画像生成がクラッシュしないようにします...しかし同時に、後で問題を引き起こすゼロによる除算を無視する不格好なハックを作成したくありません。

これらのケースを処理するための優れた、堅牢で体系的なアプローチは何でしょうか?

4

3 に答える 3

8

理想的には、画像生成がクラッシュしないようにします...しかし同時に、後で問題を引き起こすゼロによる除算を無視する不格好なハックを作成したくありません。

(スニペットがユーザー提供のコードの例であることを意味していると思います...)

明らかに、ユーザー提供のコードが例外をスローする可能性がある場合、その発生を止めることはできません。(そして、除算の前にチェックするアドバイスは明らかに無関係です...あなたには。)

では、「クラッシュ」以外に何ができるでしょうか。空の画像を生成しますか?ユーザーの機能を無視しますか?あなたはゴミを出すでしょう...そしてそれはユーザーが必要とするものではありません。

あなたは確かに彼/彼女のJavaコードに手を伸ばして修正することはできません。(そして、そのスニペットが何らかのカスタム言語で書かれたコードであることが意図されている場合、それを修正することもできません。あなた/あなたのライブラリは、ユーザー提供のコードが何をすべきかを知りません...)

いいえ。最善の答えは、ユーザー提供のコードから発生する予期しない(チェックされていない)例外を、コードでエラーが発生したことをユーザーに明確に伝える独自の例外でラップすることだと思います。次に、例外を処理するか「クラッシュ」するかは、ライブラリコードを呼び出すアプリケーションコード次第です。


ユーザーが関数を作成するための「優れた、堅牢で体系的なアプローチ」を求めているのであれば、間違ったツリーを吠えていると思います。そして、それは本当にあなたの関心事ではありません...

于 2012-05-23T01:15:34.967 に答える
0

ゼロ除算で何をすべきかを尋ねるパラメータをいつでも指定できます。結局のところ、それは彼らのコードです-彼らは自分たちのケースに最適なものを知っている必要があります。

次に、問題は、そのパラメータの妥当なデフォルトは何ですか?このアプリケーションでは、「 0.0を返す」または「例外をスローする」の両方が妥当だと思います。必ず文書化してください。

于 2012-05-23T15:49:34.007 に答える
0

私は実際にはグラフィックプログラマーではありませんが、あなたはできます

 private static final double MIN_X = 0.0000001

 red = 1.0 / Math.max(xpos - 0.5, MIN_X);

明らかに、ネガティブを許可する場合は、おそらくそこに絶対値をドロップする必要があります

于 2012-05-23T01:11:17.123 に答える