c++ - 物理引擎 : use double or single precision?

标签 c++ opengl floating-point simulation floating-accuracy

我正在从头开始制作一个刚体物理引擎(用于教育目的),我想知道我应该为它选择单精度还是 double float 。

我将使用 OpenGL 对其进行可视化,并使用 glm 库在引擎内部计算内容以及进行可视化。惯例似乎是在几乎所有地方都为 OpenGL 使用 float ,glm::vec3glm::vec4 似乎在内部使用 float .我还注意到虽然有 glm::dvec3glm::dvec4 但似乎没有人使用它。我如何决定使用哪个? double 似乎很有意义,因为它具有更高的精度并且在今天的硬件上性能几乎相同(据我所知),但其他一切似乎都使用 float 除了一些 GLu 的功能和一些 GLFW 的。

最佳答案

这一切都将取决于您的应用程序。您几乎已经了解了两者之间的权衡:

单精度

  • 不太准确
  • 即使在当今的硬件上也能实现更快的计算。占用内存更少,运算速度更快。从缓存优化等中获得更多。

double

  • 更准确
  • 计算速度较慢。

通常在图形应用程序中,考虑到屏幕上的像素数量和场景的缩放比例, float 的精度已经足够了。在科学设置或较小规模的模拟中,您可能需要额外的精度。它还可能取决于您的硬件。例如,我在上网本上为刚体编写了一个基于物理的模拟,并切换到 float 平均获得了 10-15 FPS,这在我的实现中几乎翻了一番 FPS。

我的建议是,如果这是一项教育事件,请使用 float 并定位图形应用程序。如果您在学习、时间安排和个人经验中发现您需要 double ,那么请朝那个方向前进。

关于c++ - 物理引擎 : use double or single precision?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20432006/

相关文章:

floating-point - 为什么代表 1.0 和 2.0 的位串如此不同?

c - 从 csv 读取,strtod 无法读取带有数字的字符串

C++ 插入排序崩溃

c++ - 生成词库——C或C++

opengl - 在 OpenGL 中渲染对象时消除颜色 channel

c++ - glVertexAttribDivisor 存储在哪里 - VAO、VBO 或全局状态?

c++ - 在 C++ 中对结构 vector 进行排序

c++ - boost 线程/互斥锁,为什么它有效?

c++ - 如何在 openGL 中移动窗口时重绘图片?

assembly - 浮点加法汇编算法