使用Java迭代所有浮点值
我正在开发一个数学函数,并希望在一个范围内的每个浮点值上测试它的输出。我已经在C++中完成了这个操作,但是现在我想把性能与java进行比较。如何迭代Java中的所有浮点值 在C++中,我只是用一个未签名的int迭代必要的范围,然后重新解释它为浮点指针。使用Java迭代所有浮点值,java,floating-point,reinterpret-cast,Java,Floating Point,Reinterpret Cast,我正在开发一个数学函数,并希望在一个范围内的每个浮点值上测试它的输出。我已经在C++中完成了这个操作,但是现在我想把性能与java进行比较。如何迭代Java中的所有浮点值 在C++中,我只是用一个未签名的int迭代必要的范围,然后重新解释它为浮点指针。 float *x = reinterpret_cast<float*>(&i); float*x=重新解释铸件(&i); 但是,如何在Java中实现这一点?最好尽快,因为我正在测试性能(无字符串解决方案,谢谢:D)。如果没
float *x = reinterpret_cast<float*>(&i);
float*x=重新解释铸件(&i);
但是,如何在Java中实现这一点?最好尽快,因为我正在测试性能(无字符串解决方案,谢谢:D)。如果没有快速的方法,我想我可以预先计算一百万个数组并遍历它们。但这会破坏缓存性能,因此我认为使用随机数对我的情况会更好,尽管它不会完全命中所有值。在Java中,您可以使用以下方法:
for(int i=iMin;i
在Java中,您可以使用以下方法:
for(int i=iMin;i
您可以使用获取下一个浮点数
打印从1开始的下100个浮动的示例:
float n = 1f;
System.out.println(n);
for (int i = 0; i < 100; i++) {
n = Math.nextUp(n);
System.out.println(n);
}
float n=1f;
系统输出println(n);
对于(int i=0;i<100;i++){
n=数学下一步(n);
系统输出println(n);
}
您可以使用获取下一个浮点数
打印从1开始的下100个浮动的示例:
float n = 1f;
System.out.println(n);
for (int i = 0; i < 100; i++) {
n = Math.nextUp(n);
System.out.println(n);
}
float n=1f;
系统输出println(n);
对于(int i=0;i<100;i++){
n=数学下一步(n);
系统输出println(n);
}
<代码> >注意,通过RealTytCaseCase[/c]为ReXTytCase[/c] >对于<代码>未签名的int <代码> > <代码>不是重新解释C++中字节的正确方式。C++标准支持的一种正确方式是<代码>浮点X;std::memcpy(&x,&i,sizeof x)代码> >代码>浮动> /COD>和<代码>无符号int 大小相同。请注意,通过“RealTytCaseCAST(&)”访问“<代码>浮标< /C> >对于<代码>未签名的int <代码> < <代码>不是正确解释C++中字节的方式。C++标准支持的一种正确方式是<代码>浮点X;std::memcpy(&x,&i,sizeof x)
,提供的float
和unsigned int
大小相同。WillMath.nextUp(n)代码>生成-0.0
?@chux我不知道0.0
和-0.0
之间的区别,但是从-0.0000000000000000000000000000000001F
开始测试上述代码确实会生成-0.0
,而nextDown
从正数生成0.0
。我怀疑Math.nextUp(-0.0)代码>与Math.nextUp(0.0)的正数相同代码>-因此在上升时跳过0.0
。这符合OP的“迭代所有浮点值”的目标,即使它没有迭代所有float
组合,如float.intBitsToFloat()
。WillMath.nextUp(n)代码>生成-0.0
?@chux我不知道0.0
和-0.0
之间的区别,但是从-0.0000000000000000000000000000000001F
开始测试上述代码确实会生成-0.0
,而nextDown
从正数生成0.0
。我怀疑Math.nextUp(-0.0)代码>与Math.nextUp(0.0)的正数相同代码>-因此在上升时跳过0.0
。这满足了OP“迭代所有浮点值”的目标,即使它没有迭代所有float
组合,如float.intBitsToFloat()
。