2011-08-08 14 views
2

Jack Shiraziの著書 "Java Performance Tuning"では、doubleからStringへの変換を最適化する方法を紹介しています。 最適化のコードはhttp://onjava.com/onjava/2000/12/15/graphics/DoubleToString.javaJack Shirazi DoubleToString Java最適化問題

ですが、0.0951(0.0999まで)のメソッドを使用する場合、2桁表示には特定の数字で問題があるようですが、「0.0a」を返します。これは明らかに間違っています。 0.0949で実行すると、0.09が正しく返されます。 1.0951で実行すると、正しく1.10が返されます。

何が問題だと思いますか?私は小さなビットを理解しようとしているが、まだ犯人を見つけていない。ここ

は私のテストは、メインです:

public DoubleToString() { 
double d1 = 0.0949; 
double d2 = 0.0951; 

StringBuffer sb = new StringBuffer(); 

sb.append("display d1 = "); 
appendFormatted(sb, d1, 2, '.', ',', 3, '-', '-'); 
sb.append(" : "); 
appendFormatted(sb, d2, 2, '.', ',', 3, '-', '-'); 

System.out.println(sb.toString()); 
} 
+2

おそらくあなたはジャックシラジに連絡すればよいですか? –

答えて

0

強力な提案:

  1. ループ内で100,000百万ダブルツー文字列変換を行い、ベンチマークを作成します。

  2. 使用するためのタイミングゲット "appendFormattedを()"

  3. は(Javaの5、2004のような)標準(Javaの1.4、2002年など)は、Java DecimalFormatやprintfのFormatterを使用するためのタイミングを比較

  4. この記事は2000年に書かれたものであり、彼が語っている多くの「最適化」は、間違いなく現在のJDKやJVMに関しては全く時代遅れです。

私見...

+1

興味深いコメント。私はちょうどそれをした、そして結果はShiraziの方法がDecimalFormatとFormatterよりもずっと速いことを意味する。ループ10,000,000:appendFormatted = 5.3s、DecimalFormat = 31.3s、Formatter = 63.2s – Bastien