第一个语句 if(|f| > ϵ)
只是检查确保 f
与 0 显著不同。在代码中的这个特定位置进行检查很重要,因为接下来的两个语句将除以 f
。
其他语句不需要做到这一点,因此它们不需要使用 ϵ
。
例如,
if(t1 > t2) swap(t1, t2);
交换两个数字并比较它们的自包含语句。如果错误的数字更大,则会进行交换。由于它不是用来比较一个值是否接近于0,所以不需要使用ϵ
。
如果从这段代码块返回的值可能导致调用代码除以零,那么应该在调用代码中处理。
a
和 b
是浮点数,并且 if(b <= a)
通过了,那么 sqrt(a-b)
是否是安全的操作,或者我需要使用epsilon? - McLovina-b
肯定是非负的,所以这应该是安全的。 - Bill the Lizard
if
语句都没有使用epsilon。 - McLovinf
很小(并且可能对最终图像没有太大贡献,所以你并不在乎),你可以避免一堆浮点运算(包括极慢的除法)和分支。这是来自于光线追踪器或其他什么东西吗? - Ivan Aksamentov - Drop