use*_*741 10 c++ opengl simulation floating-point floating-accuracy
我从零开始制作一个刚体物理引擎(用于教育目的),我想知道我是否应该为它选择单精度或双精度浮点数.
我将使用OpenGL对其进行可视化,并使用glm库来计算引擎内部以及可视化内容.惯例似乎是在任何地方使用浮动OpenGL,glm::vec3并且glm::vec4似乎在float内部使用.我也注意到有glm::dvec3,glm::dvec4但似乎没有人使用它.我该如何决定使用哪个?double似乎有意义,因为它在今天的硬件上具有更高的精度和几乎相同的性能(据我所知),但float 除了一些GLu的功能和一些GLFW 之外,其他一切似乎都在使用.
这一切都取决于您的应用程序.你几乎已经理解了两者之间的权衡:
单精度
双精度
通常在图形应用程序中,浮动的精度很大,因为屏幕上的像素数和场景的缩放比例.在科学设置或较小规模的模拟中,您可能需要额外的精度.它也可能取决于您的硬件.例如,我为上网本上的刚体编码了一个基于物理的模拟,并且切换到平均10-15 FPS的浮点数,这在我的实现中几乎是FPS的两倍.
我的建议是,如果这是一个教育活动,请使用浮动并定位图形应用程序.如果您在学习中找到时间和个人经验,您需要双精度,然后朝这个方向前进.
当然,一般规则首先是正确性,第二是表现吗?这意味着使用doubles除非你能说服自己使用floats 获得保真度.
要看的是坐标系相对于您打算建模的最小尺寸的一位有效尺寸.
例如,如果使用地球坐标,则100度可以在大约1E7米左右工作.IEEE 754浮点只有23位精度,因此相对精度仅为1E-7左右.因此坐标只能精确到1米左右.这可能会或可能不足以解决问题.
我从经验中学到了总是使用doubles进行物理和物理建模计算,但承认这不是一个普遍的要求.
当然,渲染应该使用double; 你可能希望这样做float.
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |