Handling division by zero in graphics code
我正在编写一个用于程序图像生成的库(Clisk),它允许用户定义自己的数学函数来生成图像。
它们显然可以定义一个函数,该函数可能导致某些像素除以零,例如(伪代码)
1 | red = 1.0 / (xposition - 0.5) |
只要xposition = 0.5(图像的中间),这将导致除以零
理想情况下,我不希望图像生成崩溃......但与此同时,我不想创建一个笨重的黑客,以忽略以后会导致问题的零除。
处理这些案件的好方法,强大而系统的方法是什么?
Ideally I don't want image generation to crash... but at the same time I don't want to create a clunky hack to ignore divide by zeros that will cause problems later.
(我假设您的代码片段是一些用户提供的代码的示例......)
显然,如果用户提供的代码可能会抛出异常,那么就无法阻止这种情况发生。 (并且在分裂之前检查的建议对你来说显然是无关紧要的。)
除了"崩溃",你能做些什么呢?生成一个空图像?忽略用户的功能?你会生产垃圾......而这不是用户需要的。
你肯定无法进入并修复他/她的java代码。 (如果该片段是用某种自定义语言编写的代码,那么你就无法触及并纠正它。你/你的库不知道用户提供的代码应该做什么......)
不,我认为最好的答案是将用户提供的代码中出现的任何意外(未经检查)异常包装在您自己的异常中,以便清楚地告诉用户他的代码中发生了错误。然后由应用程序代码调用您的库代码来处理异常还是"崩溃"。
如果您要求用户编写其功能的"良好,强大,系统的方法",我认为您正在咆哮错误的树。这不是你真正关心的问题......
你总是可以提供一个参数,询问他们在除零时做什么。毕竟,这是他们的代码 - 他们应该知道什么是最适合他们的情况。
那么问题就变成了,该参数的合理默认值是什么?我会说"返回0.0"或"抛出异常"对于此应用程序都是合理的。请确保记录下来。
我真的不是图形程序员,但你可以做到
1 2 3 |
显然,如果允许负数,你可能不得不在那里删除一个绝对值