上学期我们在学校上课时需要开发一个光线追踪器。学校结束后,我想对它进行一些调整。我想知道如果将所有的浮点运算从双精度更改为单精度(因为计算都是用双精度完成的),那么会有什么变化。所以我将每个变量都更改为float类型,并简单地将从Math方法返回的每个double强制转换为float。在几个场景下测试我的光线追踪器,发现性能有相当大的提升。
在网上搜寻后,我发现了各种关于float可能更快的原因,但也有一些说64位环境中double可能更快甚至一样快的说法。问题是,我正在64位环境和JVM中运行程序,这种性能提升的原因是什么呢?
我正在阅读《PBRT》一书,并计划完全重写一个光线追踪器。选择在浮点运算中使用float会不会带来问题?在我的测试中没有注意到任何问题,但对于某些场景而言,较低的精度可能会带来问题(例如交点测试)。或者有一种权衡方法,即在关键测试中使用double,在次要计算中使用float?如果我决定使用float,将必须使用其他数学库来消除强制转换。
在网上搜寻后,我发现了各种关于float可能更快的原因,但也有一些说64位环境中double可能更快甚至一样快的说法。问题是,我正在64位环境和JVM中运行程序,这种性能提升的原因是什么呢?
我正在阅读《PBRT》一书,并计划完全重写一个光线追踪器。选择在浮点运算中使用float会不会带来问题?在我的测试中没有注意到任何问题,但对于某些场景而言,较低的精度可能会带来问题(例如交点测试)。或者有一种权衡方法,即在关键测试中使用double,在次要计算中使用float?如果我决定使用float,将必须使用其他数学库来消除强制转换。