2012年2月11日土曜日

java 一回しか使わないArrayList

一回しか使わないArrayListを作りたい.
匿名クラス?Javaの匿名クラスを使ってかっこよくオブジェクトを初期化するテクニック - 矢野勉のはてな日記
new ArrayList<Double>() {
{
add((double) k);
add(yhk[0]);
add(yhk[1]);
}
}
→初期化する変数がfinalでないとダメ

Arrays.asList(配列)でListができるので,それをコンストラクタArrayList()
に食わせる.
→型指定がないと警告.無視すると書きだしたデータが読めん.型指定入れるとコンストラクタ未定義でエラー.

ArrayListへのaddってインスタンスコピーじゃなくて参照コピーなんだね.

2012年2月9日木曜日

doubleの精度



久しぶりにeclipseなぞ起動してシミュレーションを書く.
どうも思ったとおりの結果にならなくて,数値計算の誤差の影響を疑う.今までdoubleでやっとけば困ることはなかったのだが...

厳密にやってみよう!ということで調べてみると,BigDecimalBigDecimal (Java 2 Platform SE 5.0)を使えば丸め誤差を任意に取り扱えるとのこと.

ちょっと書いてみるが,四則演算をメソッド使って書かないといけないのでものすごい面倒くさい.今までdoubleで書いてたところを気合で書き直しても絶対ミスあるし.書くのもデバッグもかなり面倒くさい.金融系はこんな風なんだろうか.これは大変だ.

迷ってみたが書き直した.コンパイルは通ったが除算の精度指定を適当に書いたので期待通りにはならず.もうちょっと勉強が必要.

なんかdoubleの倍とか3倍とかの精度でやってくれる基本データ型はないんですか!

Groovyは標準でBigDecimalだそうで,手をだそうか検討中.