次世代数値演算 ライブラリ Decimal という再発明の意義

Preview:

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プロジェクト歌

Recommended