SlideShare a Scribd company logo
1 of 98
Download to read offline
matzり、終了!
次世代数値演算
   ライブラリ
    Decimal
という再発明の意義
 筑波大学 斎藤 匡
「Ruby逆引きレシピ」
   by Ruby札幌
「小数の計算」
拙作ライブラリ
Decimalが載っ
 ております
目の前のジュ
ンク堂書店で
売っています
「Ruby逆引きレシピ」
  by Ruby札幌
!買ってね!
Decimal
Decimal??
「任意精度
  小数演算
ライブラリ」
Floatより正確
な小数の計算
でも
今日、俺は宣伝し
に来たんじゃない
   (建前)
前提
ソフトウェア
ウェアソフトウェアソ
フトウェアソフトウェ
アソフトウェアソフト
ウェアソフトウェアソ
フトウェアソフトウェ
アソフトウェアソフト
ウェアソフトウェアソ
フトウェアソフトウェ
コモディティ
みんな「再発明」
より良い「再発
明」のしかた
Decimalは「具
体例」の一つ
一般的な「定
理」を探りたい
  ↑目的
   (建前)
Decimal??
   (2)
標準添付
「BigDecimal」
を作り直した感
  じの何か
BigDecimalの
   再発明
“Better BigDecimal”
          ↓
  Decimal (ヲレヲレ)
何故?
二点
実装がダサい
設計がダサい
133,553
   vs
 38,649
(1)
実装
について。
BigDecimal:
133,553 bytes
     vs
  Decimal:
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).size
                  vs
 Decimal.instance_methods(false).size
50
vs
37
作る方も
使う方も
  楽
スピード
ほとんどのケース
   で
数割〜数十倍以上
Decimalが高速
ということで
再利用
 慣習
シンプル
 速度
Decimalは
 「再発明」として
十分な価値をもった
再利用
 慣習
シンプル
 速度
Happy
reinvention!
Decimal
プロジェクト歌

More Related Content

Viewers also liked

Service design changes organization
Service design changes organizationService design changes organization
Service design changes organizationNaoka MISAWA
 
正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)Kazuo Suzuki
 
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜満徳 関
 
デザイン提案の参考資料
デザイン提案の参考資料デザイン提案の参考資料
デザイン提案の参考資料Tsutomu Sogitani
 
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にマイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にYusuke Suzuki
 

Viewers also liked (6)

Service design changes organization
Service design changes organizationService design changes organization
Service design changes organization
 
Yahoo! JAPANとRiak
Yahoo! JAPANとRiakYahoo! JAPANとRiak
Yahoo! JAPANとRiak
 
正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)
 
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜
『ストーリーテリング ~よい聞き手になるための学習~』第12回 POStudy 〜プロダクトオーナーシップ勉強会〜
 
デザイン提案の参考資料
デザイン提案の参考資料デザイン提案の参考資料
デザイン提案の参考資料
 
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にマイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
 

More from Tadashi Saito

From String#undump to String#unescape
From String#undump to String#unescapeFrom String#undump to String#unescape
From String#undump to String#unescapeTadashi Saito
 
Rationalを(もうちょっと)最適化してみた
Rationalを(もうちょっと)最適化してみたRationalを(もうちょっと)最適化してみた
Rationalを(もうちょっと)最適化してみたTadashi Saito
 
Rationalを最適化してみた
Rationalを最適化してみたRationalを最適化してみた
Rationalを最適化してみたTadashi Saito
 
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookRuby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookTadashi Saito
 
拡張ライブラリを作るとリア充
拡張ライブラリを作るとリア充拡張ライブラリを作るとリア充
拡張ライブラリを作るとリア充Tadashi Saito
 

More from Tadashi Saito (6)

From String#undump to String#unescape
From String#undump to String#unescapeFrom String#undump to String#unescape
From String#undump to String#unescape
 
Rationalを(もうちょっと)最適化してみた
Rationalを(もうちょっと)最適化してみたRationalを(もうちょっと)最適化してみた
Rationalを(もうちょっと)最適化してみた
 
Rationalを最適化してみた
Rationalを最適化してみたRationalを最適化してみた
Rationalを最適化してみた
 
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby BookRuby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
 
詳解! Decimal
詳解! Decimal詳解! Decimal
詳解! Decimal
 
拡張ライブラリを作るとリア充
拡張ライブラリを作るとリア充拡張ライブラリを作るとリア充
拡張ライブラリを作るとリア充
 

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