Upload
tadashi-saito
View
2.986
Download
8
Embed Size (px)
DESCRIPTION
rubykaigi2009 LT
Citation preview
matzり、終了!
次世代数値演算ライブラリ
Decimalという再発明の意義筑波大学 斎藤 匡
「Ruby逆引きレシピ」by Ruby札幌
「小数の計算」
拙作ライブラリDecimalが載っております
目の前のジュンク堂書店で売っています
「Ruby逆引きレシピ」by Ruby札幌
!買ってね!
Decimal
Decimal??
「任意精度小数演算
ライブラリ」
Floatより正確な小数の計算
でも
今日、俺は宣伝しに来たんじゃない
(建前)
前提
ソフトウェア
ソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェアソフトウェア
コモディティ
みんな「再発明」
より良い「再発明」のしかた
Decimalは「具体例」の一つ
一般的な「定理」を探りたい
↑目的(建前)
Decimal?? (2)
標準添付「BigDecimal」を作り直した感
じの何か
BigDecimalの再発明
“Better BigDecimal”↓
Decimal (ヲレヲレ)
何故?
二点
実装がダサい
設計がダサい
133,553vs
38,649
(1)
実装について。
BigDecimal:133,553 bytes
vsDecimal:
38,649 bytes
実装量の違い
約 3.5 倍コンパクト!!
何故?
再利用!
(原理はじめ)
そもそも
小数は整数の組で表せる
3.14
(314, 2)
「314」の「下から2桁」
に小数点
3.14159265358979
(314159265358979, 14)
(大きい整数 , 小さい整数)
小数の計算≒
整数の計算
(原理ここまで)
小さな整数
問題無し
大きな整数
がんばる必要
BigDecimalはどうしてる?
自前!
133,553 – 38,649 =94,904 ←ココ!
Decimalは?
大きな整数↓
Bignum
他人の褌!
副作用
安定・高速
いいことばっか
定理1再利用重要
設計について
x.sqrt
BigDecimalで平方根
普通sqrt(x)だろ jk
BigDecimal(”1.1”).to_s
#=> 0.11E1
“1.1” じゃないの?
Rails(ActiveSupport)
“1.1” になるよう上書き
違和感
=
使い辛さ
Decimalでは
sqrt(x) # 予定x.to_s # => “1.1”
自然
脳の互換性重要
定理2慣習重要
そのうえで
再発明が受け入れられるには
定理3シンプル
定理4速い
必要
シンプル
BigDecimal.instance_methods(false).sizevs
Decimal.instance_methods(false).size
50vs37
作る方も使う方も
楽
スピード
ほとんどのケースで
数割〜数十倍以上
Decimalが高速
ということで
再利用慣習
シンプル速度
Decimalは「再発明」として
十分な価値をもった
再利用慣習
シンプル速度
Happy reinvention!
Decimalプロジェクト歌