Java 图形代码中零除的处理
我正在为过程图像生成()编写一个库,它允许用户定义自己的数学函数来生成图像 显然,他们可以定义一个函数,该函数可能导致某些像素被零除,例如(伪代码) 每当xposition=0.5(图像中间)时,这将导致被零除 理想情况下,我不希望图像生成崩溃。。。但同时,我不想创建一个笨拙的黑客忽略被零除,这将导致以后的问题Java 图形代码中零除的处理,java,math,image-processing,clojure,divide-by-zero,Java,Math,Image Processing,Clojure,Divide By Zero,我正在为过程图像生成()编写一个库,它允许用户定义自己的数学函数来生成图像 显然,他们可以定义一个函数,该函数可能导致某些像素被零除,例如(伪代码) 每当xposition=0.5(图像中间)时,这将导致被零除 理想情况下,我不希望图像生成崩溃。。。但同时,我不想创建一个笨拙的黑客忽略被零除,这将导致以后的问题 处理这些案件的良好、稳健、系统的方法是什么 我不是真正的图形程序员,但你可以 private static final double MIN_X = 0.0000001 red =
处理这些案件的良好、稳健、系统的方法是什么 我不是真正的图形程序员,但你可以
private static final double MIN_X = 0.0000001
red = 1.0 / Math.max(xpos - 0.5, MIN_X);
很明显,如果你允许负数,你可能不得不在里面放一个绝对值
理想情况下,我不希望图像生成崩溃。。。但同时,我不想创建一个笨拙的黑客忽略被零除,这将导致以后的问题
(我假设您的意思是该代码段是一些用户提供的代码的示例…)
显然,如果用户提供的代码可能引发异常,那么您无法阻止这种情况的发生。(除名前检查的建议显然与您无关。)
那么除了“撞车”你还能做什么呢?生成一个空图像?忽略用户的功能?你会制造垃圾。。。这不是用户需要的
您当然无法访问并修复他/她的java代码。(如果该代码段是用某种自定义语言编写的,那么您也无法访问并更正它。您/您的库不知道用户提供的代码应该做什么…)
不。我认为最好的答案是将用户提供的代码中出现的任何意外(未检查的)异常包装在自己的异常中,该异常清楚地告诉用户错误发生在他的代码中。然后由调用库代码的应用程序代码决定是否处理异常或“崩溃”
如果你要求为用户编写函数提供一种“好的、健壮的、系统的方法”,我认为你找错了方向。这并不是你真正关心的…你总是可以提供一个参数,询问他们在除以零时做什么。毕竟,这是他们的准则——他们应该知道什么最适合自己的情况
然后问题就变成了,这个参数的合理默认值是什么?我认为“返回0.0”或“抛出异常”对于这个应用程序都是合理的。只需确保将其记录在案。也许您可以再解释一下:如果用户的功能出现问题,您为什么特别在意?为什么不让你的代码捕获异常并重新抛出一个UserDefinedCodeBuggeredUpException呢?关于一个类似的主题,有一个新的问题得到了一些很好的关注:
private static final double MIN_X = 0.0000001
red = 1.0 / Math.max(xpos - 0.5, MIN_X);