use*_*579 2 java floating-point java-native-interface
我有一个函数返回从JNI本机到Java的float.这应该是一个简单的电话,但我得到了奇怪的结果.
在我的测试用例中,我将值1.61863e + 010返回到java中.代码很简单:
cout << result << endl; cout.flush(); // get 1.61863e+010
return (jfloat) result;
Run Code Online (Sandbox Code Playgroud)
(只是为了澄清,如果cout.precision(6),我得到16186300000.000000)
但是我的Java代码正在接收1.61863004E10.我用的时候
DecimalFormat formatter = new DecimalFormat("###,###.######");
System.out.println(formatter.format(result));
Run Code Online (Sandbox Code Playgroud)
我得到16,186,300,416.
416这个来自哪里?我认为jfloat和float都是32位IEEE浮点数,所以不应该有任何精度损失.
非常感谢.
你使用的是a float,它只有7个十进制数字的精度(23位尾数,带有标准化数字的隐含位).因此,在此之后你应该把它视为有效的噪音.您的值实际上并没有改变 - 只是所显示的表示在Java和您的C++实现之间有所不同.
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |