将Java浮点数转换为C.

jle*_*and 6 c java floating-point

我有一个使用包含大量浮点数的对象的java程序.事情是出于优化原因,我需要将此代码的一部分转换为C.

对于基准测试,我已经在C中转换了所需的方法.而不是将对象作为输入,它现在采用那些浮点数组.

我将这些数组保存在Java文件中,以便从我的C代码中轻松访问它.问题是,Java浮动和C浮动显然是完全不同的,我在我的C代码中得到虚拟值.

我没有在互联网上找到任何可以帮助我完成这项任务的资源. 我确实找到了这个,但它适用于C++,我无法访问这些类.

你有什么建议吗?我想我可以开发某种转换器,但可能需要一些时间,而且可能有更好的在线解决方案.

谢谢,

编辑:

我使用DataOutputStream及其writeFloat方法保存float数组.

Pet*_*rey 5

我会使用JavaCL或JavaCV直接使用GPU.

注意:这些库也适用于Intel/AMD CPU,因此如果GPU速度不快,则无需使用GPU.

BTW:浮点数用Java和C是一样的.但是,如果使用ObejctOutputStream,则只能由Java读取,如果使用DataOutputStream,则数据将采用Big Endian格式.如果你的Intel/AMD CPU是小端,你必须交换字节.

如果你使用ByteBuffer和NIO来编写数据,你可以使它成为大端或小端.后者不需要翻译.

注意:您可以访问float[]FloatBuffer通过JNI,这意味着它不需要写入文件.

我建议使用FloatBuffer

FloatBuffer fb = ByteBuffer.allocateDirect(size*4)
                           .order(ByteOrder.nativeOrder())
                           .asFloatBuffer();
Run Code Online (Sandbox Code Playgroud)