何时使用机器epsilon何时不使用?

时间:2015-12-08 19:47:50

标签: c++

我正在读一本关于渲染3D图形的书,作者有时会使用epsilon,有时也不会。

image

请注意使用epsilon开头的if以及其他不需要的if

这背后的逻辑是什么?我可以看到他避免任何被零除的机会,但是当在函数中不使用epsilon时,它仍然有可能返回一个值,使外码被除以零。

顺便说一下,Book是Real-Time Rendering 3rd Edition。

1 个答案:

答案 0 :(得分:5)

第一个语句if(|f| > ϵ)只是检查以确保f与0明显不同。在代码中的特定位置执行此操作非常重要,因为接下来的两个语句除以f

其他声明不需要这样做,因此他们不需要使用ϵ

例如,

if(t1 > t2) swap(t1, t2); 

是一个自包含的语句,它将两个数字相互比较,如果错误的数字更大,则交换它们。由于不进行比较以查看值是否接近0,因此无需使用ϵ

如果从这段代码返回的值可以使调用代码除以零,则应该在调用代码中处理。