在C ++中,默认情况下最好使用double
,只有在我们真正知道需要时才float
或long double
。但是对于OpenGL,我发现GLfloat
似乎是默认值。考虑到双精度现在在最新的GPU上很常见,它仍然是相关的吗?
答案 0 :(得分:8)
情况恰恰相反。你应该在C ++中默认使用float
,如果你确定你确实需要那些精确的额外数字(对于一些科学的,可能是天文学或粒子物理学,模拟),你只能使用double
。通常当您认为自己需要double
时,您应该使用定点,或者应该将float
值设置为正确的范围。
你不对图形使用双精度。虽然所有现代GPU都支持它,但双精度数学通常比单精度慢,并且没有可观察到的优势。与“图形”相关的所有内容(或者说“一切”都是99.99%是一个非常明确的措辞)可以正常使用float
或GLfloat
来解决这个问题。
甚至在几年前,当一些GPU仅使用24位精度工作时,没有明显的区别。
事实上,当人们使用double
,因为他们认为他们应该这样做时,99%的时间他们做错了。
在OpenGL中非常相似。如果您了解浮点的工作原理并正确使用它,那么float
将正常工作。应用变换矩阵等时的舍入误差是不可见的
如果你不明白它是如何工作的,那么使用双精度会使问题向后移动一点,但是当你不期望它时它仍然会咬你。
令人惊讶的是,即使现在人们仍然使用双精度浮点,即使是货币或时间这些荒谬的原因(因为它的精确度是的两倍,呃?)并且当它们在脸上爆炸时会感到惊讶人们开始大吼大叫。