正在设置数据类型

Settling on a data type

本文关键字:数据类型 设置      更新时间:2023-10-16

我正在设计一个多用途C++数学库,用于创建界面、游戏等。不幸的是,我陷入了设计困境,需要一些意见。数学库包含常用的Vector、math和Matrix类,但我无法决定是使用浮点还是使用双精度。

有人能列举几个全浮动或全双的缺点吗。世界正朝着使用所有双打的方向发展吗?我应该为花车而烦恼吗?

考虑到这一点,我应该考虑有什么架构优势吗?例如,在64位系统上使用doubles会更好吗?在32位系统上浮动会更好吗(SIMD操作呢?)

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

您有两个选项:

  1. 使用模板
  2. 使用typedef

这些允许您更改类型。选择同时使用两种类型比只使用其中一种要好。

除非您的工作与工程或科学相关,并且需要高精度的结果,否则使用double进行图形编程没有任何优势。坚持使用float

请注意,游戏引擎几乎普遍使用float。虽然CPU在默认情况下往往以高精度工作,但GPU以您指定的精度工作,并且使用float比使用double快得多;SIMD指令集也是如此。还要注意OpenGL ES 1.1和2.0甚至不支持double

在我使用的Microsoft编译器中,没有浮点数学库。如果将浮点值传递给数学函数,它将被提升为double。然后,您必须将结果强制转换回浮点值。所以,你还不如到处都用替身。(如果您处于这种环境中)。

[EDIT]当然,如果您有一个由10000个浮点值组成的数组,那么使用float将节省大量内存。

浮点更小(=从内存读取/写入以及从图形级联传输/到图形级联更快),对某些操作(除法和平方根)更快,4个浮点可以很好地放入单个SIMD寄存器(同质坐标),并且具有足够的游戏精度。32/64位系统上的浮点/双精度之间没有速度差异。

总之:坚持使用浮子。您可能想要使用typedef,比如typedef float CoordinateType