使用 Java 遍历所有浮点值
Iterating through all float values with Java
我正在开发一个数学函数,并想在一个范围内的每个浮点值上测试它的输出。我已经在 C++ 中完成了此操作,但现在我想将性能与 Java 进行比较。如何遍历 Java 中的所有浮点值?
在 C++ 中,我只是简单地使用 unsigned int 遍历必要的范围,然后将其重新解释为浮点指针
float *x = reinterpret_cast<float*>(&i);
可是,Java怎么能做到呢?最好快点,因为我正在测试性能(没有字符串解决方案,谢谢 :D )。如果没有快速的方法,我想我可以将其中的一百万个预先计算到一个数组中并遍历它们。但这会扰乱缓存性能,所以我认为使用随机数对我来说会更好,尽管它不会完全达到所有值。
在Java中你可以使用方法Float.intBitsToFloat(int)
:
for (int i = iMin; i < iMax; i++) {
float f = Float.intBitsToFloat(i);
...
}
您可以使用Math.nextUp(float)
获取下一个浮点数。
打印从 1 开始的下 100 个浮点数的示例:
float n = 1f;
System.out.println(n);
for (int i = 0; i < 100; i++) {
n = Math.nextUp(n);
System.out.println(n);
}
我正在开发一个数学函数,并想在一个范围内的每个浮点值上测试它的输出。我已经在 C++ 中完成了此操作,但现在我想将性能与 Java 进行比较。如何遍历 Java 中的所有浮点值?
在 C++ 中,我只是简单地使用 unsigned int 遍历必要的范围,然后将其重新解释为浮点指针
float *x = reinterpret_cast<float*>(&i);
可是,Java怎么能做到呢?最好快点,因为我正在测试性能(没有字符串解决方案,谢谢 :D )。如果没有快速的方法,我想我可以将其中的一百万个预先计算到一个数组中并遍历它们。但这会扰乱缓存性能,所以我认为使用随机数对我来说会更好,尽管它不会完全达到所有值。
在Java中你可以使用方法Float.intBitsToFloat(int)
:
for (int i = iMin; i < iMax; i++) {
float f = Float.intBitsToFloat(i);
...
}
您可以使用Math.nextUp(float)
获取下一个浮点数。
打印从 1 开始的下 100 个浮点数的示例:
float n = 1f;
System.out.println(n);
for (int i = 0; i < 100; i++) {
n = Math.nextUp(n);
System.out.println(n);
}