我知道Math.sqrt调用StrictMath.sqrt(double a)我想查看用于计算它的实际代码.
我正在将最初用VB.NET编写的程序移植到Java.我正在读取一个以小端序存储32位浮点数的文件.
原始程序执行此操作:
Dim br As BinaryReader = ...
Dim f_vb As Single = br.ReadSingle
Run Code Online (Sandbox Code Playgroud)
Java是大端,所以我在转换为float之前反转字节.
RandomAccessFile raf = // ...
int i = raf.readInt();
int bigEndian = Integer.reverseBytes(i);
float f_java = Float.intBitsToFloat(bigEndian);
Run Code Online (Sandbox Code Playgroud)
据我所知,f_vb并f_java包含相同的位.也就是说,BitConverter.ToInt32on f_vb和Float.floatToIntBits(和floatToRawIntBits)on f_java给出相同的东西.但是,花车并不相同.例如,让我们bigEndian == 0x4969F52F.Java将报告958290.94,VB.NET将报告958290.938.我猜这是因为JVM和CLR处理浮点数的方式有所不同,但我对浮点问题知之甚少以找出原因.这种精度的损失导致了线路故障,所以我想确定来源.