解决数据类型问题

时间:2012-02-12 04:53:50

标签: c++ api

我正在设计一个多用途C ++数学库,用于创建接口,游戏等。不幸的是,我陷入了设计困境,需要一些意见。数学库包含通常的Vector,Math,Matrix类,但我不能决定是使用浮点数还是双打。

有人可以列出所有浮动或全部加倍的一些缺点。世界是否只是朝着使用所有双打的方向发展,我是否应该为花车烦恼呢?

考虑到这一点,我是否应该考虑任何架构优势,例如,在64位系统上使用双精度会更好,32位系统的浮点数会更好(SIMD操作怎么样?)

设计这样一个系统的理想方法是什么?

4 个答案:

答案 0 :(得分:1)

您有两个选择:

  1. 使用模板
  2. 使用typedef
  3. 这些允许您更改类型。选择使用这两种类型比仅使用一种更好。

答案 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