在图形代码中处理除零

时间:2012-05-23 01:01:04

标签: java math image-processing clojure divide-by-zero

我正在编写一个用于程序图像生成的库(Clisk),它允许用户定义自己的数学函数来生成图像。

他们显然可以定义一个函数,该函数可能导致某些像素除以零,例如(伪代码)

red = 1.0 / (xposition - 0.5)

每当xposition = 0.5(图像的中间)

时,这将导致除以零

理想情况下,我不希望图像生成崩溃......但与此同时,我不想创建一个笨重的黑客来忽略以后会导致问题的零除。

处理这些案件的好的,强大的,系统的方法是什么?

3 个答案:

答案 0 :(得分:8)

  

理想情况下,我不希望图像生成崩溃......但与此同时,我不想创建一个笨重的黑客来忽略以后会导致问题的零除。

(我假设你的意思是代码片段是一些用户提供的代码的例子......)

显然,如果用户提供的代码可能会抛出异常,那么就无法阻止这种情况发生。 (并且在分裂之前检查的建议显然与你无关......)

那么除了“崩溃”之外可以做什么?生成一个空图像?忽略用户的功能?你会生产垃圾......而这不是用户需要的。

你当然无法进入并修复他/她的java代码。 (如果该片段是用某种自定义语言编写的代码,那么你也无法触及并纠正它。你/你的库不知道用户提供的代码应该做...)

没有。我认为最佳答案是将用户提供的代码中的任何意外(未经检查)异常包装在您自己的异常中,该异常会清楚地告诉用户他的代码中发生了错误。然后由应用程序代码调用您的库代码来处理异常还是“崩溃”。


如果您要求用户编写其功能的“良好,强大,系统的方法”,我认为您正在咆哮错误的树。这不是你真正关心的问题......

答案 1 :(得分:0)

我真的不是图形程序员,但你可以做到

 private static final double MIN_X = 0.0000001

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

显然,如果允许否定

,你可能不得不在那里删除一个绝对值

答案 2 :(得分:0)

你总是可以提供一个参数询问他们在除零时做什么。毕竟,这是他们的代码 - 他们应该知道什么是最适合他们的情况。

那么问题就变成了,该参数的合理默认值是什么?我会说“return 0.0”“抛出异常”对于这个应用程序来说都是合理的。请确保记录下来。