Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java迭代所有浮点值_Java_Floating Point_Reinterpret Cast - Fatal编程技术网

使用Java迭代所有浮点值

使用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)。如果没

我正在开发一个数学函数,并希望在一个范围内的每个浮点值上测试它的输出。我已经在C++中完成了这个操作,但是现在我想把性能与java进行比较。如何迭代Java中的所有浮点值

在C++中,我只是用一个未签名的int迭代必要的范围,然后重新解释它为浮点指针

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
大小相同。Will
Math.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()
。Will
Math.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()