我注意到我的一个计算着色器有一些奇怪的行为,它们会意外地返回 nan。
仔细调查时,我发现 pow
成为罪魁祸首:
pow(1, inf) == NaN
来自C/C++我期望的观点pow(1, inf) == 1
:
pow(+1, exponent) returns 1 for any exponent, even when exponent is NaN
是GLSL的pow
为此输入定义?
我只找到了 base < 0
的常见异常(exception)情况, 和 base == 0 && exponent <= 0
在规范中。
最佳答案
@Damon's answer很接近,但从规范中复制了一个错误:
pow(x, y) == exp2(x * log2 (y))
交换了 x 和 y。应该是
pow(x, y) == exp2(y * log2 (x))
(测试例如 pow(2, 3)
)
使用正确的公式我们得到
pow(1, inf) == exp2(inf * log2(1)) == exp2(inf * 0) == exp2(nan) == nan
关于c++ - 战俘(1,信息)==南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915601/