Mel*_*ign 6 opengl-es glsl ios
如果我的着色器程序中有不同的浮点数:
varying highp float someFloat;
Run Code Online (Sandbox Code Playgroud)
在顶点着色器中,我将其设置为某种东西.
someFloat = 1.0;
Run Code Online (Sandbox Code Playgroud)
为什么在我的片段着色器中这个比较似乎返回false?
someFloat == 1.0 // false
Run Code Online (Sandbox Code Playgroud)
但这会返回真的吗?
someFloat > .0 // true
Run Code Online (Sandbox Code Playgroud)
在iPad mini上测试openGL ES.
NIN*_*OOP 12
它发生在任何IEEE 754浮点数上.这是因为浮点表示的本质.任何使用IEEE 754格式的语言都会遇到同样的问题.
由于1.0
可能无法在浮点系统中精确表示1.000000000...
,因此使用它们进行比较被认为是危险的==
.应始终将浮点数与epsilon值进行比较.
由于浮点计算涉及一些不确定性,我们可以尝试通过查看两个数字是否彼此"接近"来实现这一点.如果您根据错误分析,测试或疯狂猜测决定 - 结果应始终在预期结果的0.00001范围内,那么您可以将比较更改为:
if (fabs(someFloat - 1.0)) < 0.00001)
Run Code Online (Sandbox Code Playgroud)
最大误差值通常称为epsilon.
可能你应该阅读每个计算机科学家应该知道的关于浮点运算的内容
归档时间: |
|
查看次数: |
4849 次 |
最近记录: |