JNI ネイティブから Java に float を返す関数があります。これは簡単な呼び出しのはずですが、奇妙な結果が得られます。
私のテストケースでは、値 1.61863e+010 を Java に返しています。コードは次のとおりです。
cout << result << endl; cout.flush(); // get 1.61863e+010
return (jfloat) result;
(明確にするために、cout.precision(6) の場合、16186300000.000000 を取得します)
ただし、私の Java コードは 1.61863004E10 を受信しています。私が使うとき
DecimalFormat formatter = new DecimalFormat("###,###.######");
System.out.println(formatter.format(result));
16,186,300,416 を取得します。
この 416 はどこから来たのですか? jfloat と float はどちらも 32 ビット IEEE float であると考えていたので、精度が失われることはありません。
どうもありがとう。