【发布时间】:2015-09-12 08:33:30
【问题描述】:
上学期我们不得不为学校的一门课程开发光线追踪器。放学了,我试着摆弄一下。
我想看看如果我将所有浮点计算从 double 更改为 float(所有计算都使用 double 完成)会发生什么变化。因此,我将每个变量都更改为 float 类型,然后简单地将 Math 方法返回的每个 double 类型转换为 float。在几个场景中测试我的光线追踪器显示了相当可观的性能提升。
在网络上搜索我发现了为什么 float 可以更快的各种原因,但也有人说 double 可以同样快,甚至在 64 位环境中更快。问题是,我在 64 位环境和 JVM 中运行。性能提高的原因是什么?
现在,我正在阅读 PBRT 书籍,并计划在此之后从头开始重写光线追踪器。为所有浮点计算选择浮点数会带来任何问题吗?我在测试过程中没有注意到任何问题,但也许对于某些场景,精度可能较低(交叉测试似乎可能会造成问题)?或者也许是一种权衡,比如对关键测试使用双精度,对不太关键的计算使用浮点数?我将不得不使用其他数学库来摆脱强制转换,我会采用浮动方式吗?
【问题讨论】:
-
我相信
double d = 1d是两条指令,而float f = 1f是一条。即使在 64 位机器上。使用 64 位 JVM。 -
“我在 64 位环境中运行” 64 位操作系统不算作 64 位环境。您的编译器和其他工具(如果您正在使用 Java,例如 JVM)也必须是 64 位的。
-
你能放一些代码吗!
-
@Code-Apprentice for Java 我认为 32/64 位编译之间没有真正的区别?我在 64 位版本的 JVM 上运行它。
标签: java floating-point raytracing