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