正在设置数据类型
Settling on a data type
我正在设计一个多用途C++数学库,用于创建界面、游戏等。不幸的是,我陷入了设计困境,需要一些意见。数学库包含常用的Vector、math和Matrix类,但我无法决定是使用浮点还是使用双精度。
有人能列举几个全浮动或全双的缺点吗。世界正朝着使用所有双打的方向发展吗?我应该为花车而烦恼吗?
考虑到这一点,我应该考虑有什么架构优势吗?例如,在64位系统上使用doubles会更好吗?在32位系统上浮动会更好吗(SIMD操作呢?)
设计这样一个系统的理想方式是什么?
您有两个选项:
- 使用模板
- 使用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
。
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 在 C++ 中设置的用户定义数据类型
- 根据参数设置构造函数的成员数据类型
- Oracle 11gR1或R2客户端上是否设置了在ODBC API调用中将SELECT COUNT(*)返回的数据类型从
- RegGetValue返回的数据类型与admx文件中提到的gpo设置的数据类型不同
- 正在设置数据类型
- 如何在c++中设置智能感知来显示自定义数据类型
- 如何为特定的模板数据类型设置条件