如何在 glsl 上解释 "precision"

How to interpret "precision" on glsl

来自 What is the precision of highp floats in GLSL ES 2.0 (for iPhone/iPod touch/iPad)? ...

例如,在 iPhone 5S 上,highp 浮点数的精度为“23”。从文档(第 33 页,第 4.5.2 节 — https://www.khronos.org/files/opengles_shading_language.pdf )中,我将其解释为“两个浮点数之间的差异至少为 2^-23,即 1.1920929e-7。但是我相当有信心我没有正确理解这一点,因为我认为我已经计算出了比它小两三个数量级的差异(并且超出了这个范围)。

是我的计算很幸运,还是我误解了这个值?

"The difference between two floating point numbers is at least 2^-23" 不太正确。

来自 the documentation:"If the smallest representable value greater than 1 is 1+∊ then floor(-log₂(∊)) is returned in precision."

所以,这对您来说意味着在您的环境中,1 之后的下一个可表示数字是 (1+2^-23)。这与说 epsilon 始终为 2^-23 并不完全相同,因为浮点精度为 nonlinear - 最接近的可表示值之间的差异取决于值的大小。如果您阅读那篇文章(我推荐),请特别注意零附近可表示值的密度增加,尤其是在编码允许非范数的情况下。