小编Koe*_*kje的帖子

Java 8流短路

在Java 8上读了一下,我得到了这篇博文,解释了一些关于流和减少它们的内容,以及什么时候可以缩短缩减.在底部它表明:

注意在findFirst或者findAny我们只需要与谓词匹配的第一个值(虽然findAny不能保证返回第一个).但是如果流没有排序,那么我们期望findFirst表现得像findAny.的操作allMatch,noneMatchanyMatch可能不短路流,因为在所有可能需要评估所有的值,以确定操作者是否是truefalse.因此,使用这些的无限流可能不会终止.

我得到了这个findFirst或者findAny可能会缩短减少量,因为一旦你找到了一个元素,你就不需要再进一步处理了.

但为什么这不可能allMatch,noneMatch并且anyMatch?因为allMatch,如果找到与谓词不匹配的一个,则可以停止处理.同样没有.而且anyMatch尤其是没有道理给我,因为它几乎等于findAny(除了返回什么)?

说这三个可能不会短路,因为它可能需要评估所有的值,也可以说findFirst/Any.

我缺少一些根本区别吗?我真的不明白发生了什么事吗?

java short-circuiting java-8 java-stream

18
推荐指数
3
解决办法
7748
查看次数

Java raytracing float vs double

上学期我们必须为学校的课程开发光线跟踪器.学校正在完成,我试图用它来捣乱.

我想知道如果我将所有浮点计算从double更改为float(所有计算都是使用双精度计算)会发生什么变化.所以我将每个变量更改为float类型,并简单地将从Math方法返回的每个double转换为float.在几个场景中测试我的光线跟踪器显示了相当不错的性能提升.

在网上搜索我发现浮动可能更快的各种原因,但也有人说在64位环境中双倍可以更快,甚至更快.问题是,我在64位环境和JVM中运行.这种性能提升的原因是什么?

现在,我正在阅读PBRT书,并计划在此之后从头开始重写光线跟踪器.为所有浮点计算选择浮点数会产生任何问题吗?在我的测试中我没有注意到任何东西,但是对于某些场景来说可能较低的精度(交叉点测试似乎可能会造成问题)?或者可能是一种权衡,比如在关键测试中使用double,为不太关键的计算使用float?我将不得不使用其他数学库来摆脱铸造,我会采用浮动方式.

java floating-point raytracing

9
推荐指数
1
解决办法
1304
查看次数