我正在设计一个多用途C ++数学库,用于创建接口,游戏等。不幸的是,我陷入了设计困境,需要一些意见。数学库包含通常的Vector,Math,Matrix类,但我不能决定是使用浮点数还是双打。
有人可以列出所有浮动或全部加倍的一些缺点。世界是否只是朝着使用所有双打的方向发展,我是否应该为花车烦恼呢?
考虑到这一点,我是否应该考虑任何架构优势,例如,在64位系统上使用双精度会更好,32位系统的浮点数会更好(SIMD操作怎么样?)
设计这样一个系统的理想方法是什么?
答案 0 :(得分:1)
您有两个选择:
这些允许您更改类型。选择使用这两种类型比仅使用一种更好。
答案 1 :(得分:1)
除非您的工作与工程或科学相关且需要高精度结果,否则使用double
进行图形编程没有任何优势。坚持float
。
请注意,游戏引擎几乎普遍使用float
。虽然默认情况下CPU往往具有高精度,但GPU使用您指定的精度,使用float
比使用double
更快。同样适用于SIMD指令集。另请注意,OpenGL ES 1.1和2.0甚至不支持double
。
答案 2 :(得分:0)
在我使用的Microsoft编译器中,没有浮动数学库。如果将float传递给数学函数,则会将其提升为double。然后你必须将结果转换回浮点数。所以,你不妨到处加倍。 (如果你在这种环境中)。
[EDIT]当然,如果你有一个包含10,000个浮点值的数组,那么使用float会节省大量的内存。
答案 3 :(得分:0)
浮点数较小(=从内存读取/写入更快以及从/向图形casrd传输更快),对于某些操作(分区和平方根)更快,4个浮点数很好地适合单个SIMD寄存器(同质坐标),并且具有足够的游戏精度。在32/64位系统上,float / double之间没有速度差异。
总之:坚持使用花车。您可能希望使用typedef,例如typedef float CoordinateType
。