常数0.0039215689代表什么?

我不断看到这个常量popup在各种graphics头文件

0.0039215689 

这似乎与颜色有关吗?

这是Google的第一个热门游戏 :

 void RDP_G_SETFOGCOLOR(void) { Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f; Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f; Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f; Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f; } void RDP_G_SETBLENDCOLOR(void) { Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f; Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f; Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f; Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f; if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) { glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A); } } //...more like this 

这个数字代表什么? 为什么没有人似乎把它声明为一个常量?

我在Google上找不到解释它的任何内容。

0.0039215689大约等于1/255

看到这是OpenGL,性能可能很重要。 所以猜测这是出于性能原因可能是安全的。

乘以倒数比重复除以255要快。


边注:

如果您想知道为什么这样的微型优化没有留给编译器,那是因为这是一个不安全的浮点优化。 换一种说法:

 x / 255 != x * (1. / 255) 

由于浮点四舍五入错误。

所以,尽pipe现代编译器可能足够聪明地进行这种优化,但是除非你明确告诉它们通过编译器标志,否则不允许这样做。

相关: 为什么不GCC优化a * a * a * a * a到(a * a * a)*(a * a * a)?

该乘以0.0039215689f将0到255范围内的整数值颜色强度转换为0到1范围内的实值颜色强度。

正如Ilmari Karonen所指出的那样,即使这是一个优化,也是一个相当糟糕的expression。 乘以(1.0f/255)会更清楚。