c++ - 战俘(1,信息)==南?

标签 c++ opengl glsl nvidia

我注意到我的一个计算着色器有一些奇怪的行为,它们会意外地返回 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/

相关文章:

c++ - C 编程一元运算符优先级

c++ - glReadPixels() 设置 GL_INVALID_OPERATION 错误

java.awt.Graphics ->graphics.drawImage 太慢,出了什么问题?

opengl - GLSL 分支行为

iphone - GLSL ES 2.0(适用于 iPhone/iPod touch/iPad)中的 highp float 的精度是多少?

opengl - 动态长度数组作为着色器存储缓冲区对象

C++ 避免重新定义需要返回多态类型的代码

c++ - 数据结构 : Many (A) to many (B) relationship, 每个链接也有自己的数据 (C)

c++ - 将球体移动到平面永远不会预测 future 的碰撞

ios - 如何在 OpenGL ES 2.0 中获得 "Glow"着色器效果?