我正在读一本关于渲染3D图形的书,作者有时会使用epsilon,有时也不会。
请注意使用epsilon开头的if
以及其他不需要的if
。
这背后的逻辑是什么?我可以看到他避免任何被零除的机会,但是当在函数中不使用epsilon时,它仍然有可能返回一个值,使外码被除以零。
顺便说一下,Book是Real-Time Rendering 3rd Edition。
答案 0 :(得分:5)
第一个语句if(|f| > ϵ)
只是检查以确保f
与0明显不同。在代码中的特定位置执行此操作非常重要,因为接下来的两个语句除以f
。
其他声明不需要这样做,因此他们不需要使用ϵ
。
例如,
if(t1 > t2) swap(t1, t2);
是一个自包含的语句,它将两个数字相互比较,如果错误的数字更大,则交换它们。由于不进行比较以查看值是否接近0,因此无需使用ϵ
。
如果从这段代码返回的值可以使调用代码除以零,则应该在调用代码中处理。