【发布时间】:2015-11-02 03:12:53
【问题描述】:
我注意到我的一个计算着色器中有一些奇怪的行为,它们会意外返回 nan。
仔细调查后,我发现pow 是罪魁祸首:
pow(1, inf) == NaN
从C/C++ 的角度来看,我希望pow(1, inf) == 1:
pow(+1, exponent) 对任何指数都返回 1,即使指数为 NaN
是否为此输入定义了 GLSL 的 pow?
我只在规范中发现了base < 0 和base == 0 && exponent <= 0 的常见例外情况。
【问题讨论】:
-
1/0,嗯?被零除?无穷大似乎是正确的结果,而 NaN 作为无穷大的力量是不可能的。 -
@Vallentin:我只能告诉你我所看到的。 1/0 没有编译器错误(或警告)以及来自 pow 的 1 的结果。如果你有更好的方法create INF inside GLSL 告诉我。
-
除以零不需要抛出错误,因为无穷大是可接受的结果。因此 x^infinity 再次等于预期的 NaN。我的意思是,我看不出问题出在哪里,因为结果是有道理的。
-
@Vallentin 从数学的角度来看,我希望 1^infinity 为 1,x^infinity 为 0 1 为无穷大。 NaN 恕我直言的唯一地方是负数的无穷次幂。
-
@Nobody 从数学的角度来看,1^Infinity 不是 1。mathforum.org/library/drmath/view/56006.html