- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 C++ 中,最好默认使用 double
,只有当我们确实需要它们时才使用 float
或 long double
。不过对于 OpenGL,我看到 GLfloat
似乎是默认值。考虑到 double 现在在最新的 GPU 上很常见,它仍然有意义吗?
最佳答案
情况正好相反。你应该在 C++ 中默认使用 float
并且只有在你确定你确实需要那些额外的精度数字时才使用 double
(对于某些科学,可能是天文或粒子物理、模拟)。通常当您认为需要 double
时,您应该使用定点,或者您应该将 float
值置于正确的范围内。
您不对图形使用 double 。尽管所有现代 GPU 都很好地支持它,但 double 学通常比单精度慢,而且它没有明显的优势。与“图形”相关的一切(或者假设 99.99%,因为“一切”是一个非常明确的措辞)就此而言使用 float
或 GLfloat
工作得很好。
即使在几年前,当一些 GPU 仅以 24 位精度工作时,也没有明显的区别。
事实上,当人们使用 double
是因为他们认为他们应该这样做时,那么 99% 的时间他们都做错了。
Tom Forsyth 甚至将“ double ”作为他 Offend-O-Matic 的第一点.他专门与“游戏”相关,但它实际上适用于几乎所有软件,一些科学模拟除外。请务必阅读随附的文章 A Matter of Precision理解他的推理。
埃里克森的 epsilon is not 0.000001 关于 float 的必读内容不那么令人反感。演示文稿。
在 OpenGL 中非常相似。如果您了解 float 的工作原理并正确使用它,那么 float
就可以正常工作。应用变换矩阵等时的舍入误差是不可见的。
如果您不理解它是如何工作的,使用 double 会将问题向后转移一点,但当您不期望它时它仍然会咬住您。
令人惊讶的是,即使是现在人们仍然使用 double 浮点,即使是出于货币或时间等荒谬的原因(因为它的精度是两倍,嗯?)并且当它在他们面前爆炸时会感到惊讶人们开始对他们大喊大叫。
关于c++ - 默认情况下是 GLfloat 还是 GLdouble?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121105/
在调用 OpenGL 函数时,出现以下错误: error C2664: cannot convert parameter 1 from 'const GLdouble' to 'const GLdou
在 C++ 中,最好默认使用 double,只有当我们确实需要它们时才使用 float 或 long double。不过对于 OpenGL,我看到 GLfloat 似乎是默认值。考虑到 double
我有一个接受 GlDouble vector 的 vector 。但是当我尝试插入一个时,它说: Error 1 error C2664: 'std::vector::push_back' : can
我是一名优秀的程序员,十分优秀!