きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

BigDecimal

java.math.BigDecimalと浮動小数点数の歴史

わりとどうでも良い歴史の時間です。 まずは浮動小数点の規格についてふれておこう。 IEEE754-1985 = 2進浮動小数点数 IEEE854-1987 = 基数に依存しない浮動小数点数の規格(とは言っても・・・) IEEE754-2008 = IEEE754-1985 + IEEE854-1987 = 主に10進浮…

java.math.BigDecimalの最大桁数(理論値)

面倒臭いことを調べることになったJavaプログラマーに捧ぐ すこし時間を割いて最大桁数を計算してみることにしました。 結論からいうと 2793926648桁くらいだと思う。 精度の限界は646443000桁くらいです。 無量大数が128桁です、と補足しておこう。 動かす…

Javaプログラマーのためのjava.math.BigDecimalまとめ

以前書いたメモ的なエントリーを読み返してみて、 簡単なエントリーに書きなおそうと思いたった。 java.math.BigDecimalの構造 「精度(precision)」と「スケール(scale)」と「一般的な桁数」の違い 精度とスケールの違いを正しく把握しているかを試すのに、 …

34桁目のせめぎあい

なかなか34桁目まで合わすというのは苦労が伴う。 とりあえずMathContextに69桁くらい設定したら、なんとか計算出来たっぽい。 平方根の計算で検算しながらやってみた。 9.99999999999999999999999999999999999997E6144の平方根の難易度が高い。 検算(2乗)す…

累乗計算が完成した

exp関数も出来たし、logn関数も出来たので、power関数も出来た。 性能もなかなか良いよ。まさかの4ミリ秒台が出てきた。 doubleなら50ナノ秒あたりだろうけど。 public static BigDecimal power(BigDecimal x, BigDecimal y){ return exp(y.multiply(logn(x)…

累乗計算のアルゴリズム

昨日ひらめいたー。 javaでついに作れたー。 けっこう極めてきた。 まずWikipediaにもあるアルゴリズムでnが整数のn乗根を実装した。 これで「小数の1/n乗(小数のn乗根)」が出来る。 ここがスタートライン。 XのY乗におけるYを1/nと考えるのが上記のn乗根だ…

数字のキャッシュ

以前の日記をもう一度書いているようなもんなんだが…。 先に付加情報を書いておく。 -XX:AutoBoxCacheMax=というVMオプションが効くようだ。 たぶんこれもJava6.0 update 14からなんだろうが、 私が確認した環境はupdate 17です。 これを付けて、オートボク…

Javaプログラマーがjava.math.BigDecimalについて知るべきこと

2012/11/4追記 こっち見てもらった方がいいかも。 Javaプログラマーのためのjava.math.BigDecimalまとめ - きどたかのブログ 2012/11/4追記 終わり ざっくりと羅列してみた。 java.math.BigDecimalは、クラス説明にある通り任意精度のスケールなし整数と、32…

浮動小数点やBigDecimalに関して

意見が噛み合わない。 僕はきっと正しいはずだ。 1d/3dが完璧な値を保持してると寝言を言う人に負けるな自分。 小数点演算において、1÷3は無理数である。 無理数を有限数のbitで表現する術はない。 故に1d/3dは丸まっている。 ちなみに、1dは有理数、3dも有…

java.sql.BigDecimalなんてないよ?

家のSun JDKは1.6.0_06と結構古いです。 昨年7月の引越しからネット回線引いてないのでそれから更新されてません。 java.sql.ResultSetのソースを見ていたら、 BigDecimal getBigDecimal(int columnIndex,int scale) throws SQLException のJavaDocに誤記を…

IBM JDKのBigDecimalはバグってるっぽい。

職場で使ってるRAD7.5.2で使ってるjava -version。 ....\IBM\SDP\jdk\bin>java.exe -version - java version "1.6.0" Java(TM) SE Runtime Environment (build pwi3260sr4-20090219_01(SR4)) IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Windows XP x86-32…