hokkaido pm 8 lt
DESCRIPTION
Hokkaido.pm #8 向けのLT 資料です 浮動小数点数のテストについて (?)TRANSCRIPT
![Page 1: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/1.jpg)
Hokkaido.pm #8Li!htnin! Talk
Hachioji.pm / Kokusaitenjijomae.pm@moznion
Sunday, December 23, 12
![Page 2: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/2.jpg)
@moznion大学生アルバイトソフトウェアエンジニア
2年前まで道民でした
2日前に論文がリジェクトされたのでブルー入ってます
Sunday, December 23, 12
![Page 3: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/3.jpg)
クリスマスらしくAcme の話……
Sunday, December 23, 12
![Page 4: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/4.jpg)
はしません
クリスマスらしくAcme の話……
Sunday, December 23, 12
![Page 5: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/5.jpg)
皆さんPerl で数値計算してますか!?
Sunday, December 23, 12
![Page 6: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/6.jpg)
数値計算してるとクソ面倒なアイツがいますよね
Sunday, December 23, 12
![Page 7: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/7.jpg)
浮動小数点数
Sunday, December 23, 12
![Page 8: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/8.jpg)
浮動小数点数めんどい
Sunday, December 23, 12
![Page 9: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/9.jpg)
浮動小数点数めんどい今日はこれについて
Sunday, December 23, 12
![Page 10: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/10.jpg)
さて拙作のモジュールでハマったこと
Sunday, December 23, 12
![Page 11: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/11.jpg)
浮動小数点数をこんな感じでテストすると死ねます
Sunday, December 23, 12
![Page 12: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/12.jpg)
Sunday, December 23, 12
![Page 13: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/13.jpg)
見るからにやばそうSunday, December 23, 12
![Page 14: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/14.jpg)
こういう事をするとテストがズッコケる環境が出てくる
Sunday, December 23, 12
![Page 15: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/15.jpg)
ぐぬぬ…
Sunday, December 23, 12
![Page 16: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/16.jpg)
ありがたいことにISSUE が来る
(@syohex さんありがとうございます)
Sunday, December 23, 12
![Page 17: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/17.jpg)
ISSUE が来る(ありがたいことに)
https://!ithub.com/moznion/Math--PhaseOnlyCorrelation/issues/1
Sunday, December 23, 12
![Page 18: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/18.jpg)
浮動小数は色々めんどいから普通に比較するとダメよ、
とのこと† 以下が詳しい x86における浮動小数点演算の精度の制御と、 80bit 浮動小数点演算問題 http://www.takeoka.or!/~take/cpu/num/float80bit.html
Sunday, December 23, 12
![Page 19: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/19.jpg)
あとCPAN Testers Daily
Summary Reportからも毎日メールが来る
(深夜に)
Sunday, December 23, 12
![Page 20: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/20.jpg)
そしてCPAN Testers Daily
Summary Reportから毎日メールが来る
夜も眠れない!!(Report はありがたいんですが)
Sunday, December 23, 12
![Page 21: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/21.jpg)
夜は眠りたいので直しましょう
Sunday, December 23, 12
![Page 22: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/22.jpg)
方法 1
Sunday, December 23, 12
![Page 23: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/23.jpg)
小数点以下を切り捨てて整数にしてからテストをする
Sunday, December 23, 12
![Page 24: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/24.jpg)
TODO こんなかんじ
e.!.
Sunday, December 23, 12
![Page 25: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/25.jpg)
e.!.
TODO こんなかんじまさに外道!!!
Sunday, December 23, 12
![Page 26: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/26.jpg)
悪党な方法過ぎて駄目そもそもテストの正当性が
失われている
Sunday, December 23, 12
![Page 27: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/27.jpg)
方法 2
Sunday, December 23, 12
![Page 28: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/28.jpg)
$var * 10 ^ $numしてから小数点以下を切り捨ててテストする
Sunday, December 23, 12
![Page 29: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/29.jpg)
e.!.
Sunday, December 23, 12
![Page 30: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/30.jpg)
$num 桁までの精度は保証される
ただ、ちょっとダサい (主観)
Sunday, December 23, 12
![Page 31: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/31.jpg)
あと、整数桁数が莫大に増えたら
それもそれで問題な気が
Sunday, December 23, 12
![Page 32: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/32.jpg)
方法 3
Sunday, December 23, 12
![Page 33: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/33.jpg)
採択域を設定して、両者の差がその範囲内かを
テストする
Sunday, December 23, 12
![Page 34: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/34.jpg)
TODO こんなかんじ
e.!.
Sunday, December 23, 12
![Page 35: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/35.jpg)
割と良い感じ。拙作のモジュールでも
一時期 (3日くらい) やってた
Sunday, December 23, 12
![Page 36: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/36.jpg)
方法 4
Sunday, December 23, 12
![Page 37: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/37.jpg)
正規表現でバツンと切って小数桁数を制限する
Sunday, December 23, 12
![Page 38: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/38.jpg)
e.!.
Sunday, December 23, 12
![Page 39: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/39.jpg)
結構メイジャーな方法っぽい(特にPhysics のモジュールで)けど、なんかやだ (主観)
Sunday, December 23, 12
![Page 40: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/40.jpg)
方法 5
Sunday, December 23, 12
![Page 41: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/41.jpg)
sprintf(“%.${num}f”, $var)を使って桁数を制限する
Sunday, December 23, 12
![Page 42: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/42.jpg)
e.!.
Sunday, December 23, 12
![Page 43: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/43.jpg)
これが一番しっくり来た。なんか良い感じ
(Math のモジュールで良く見かける)
Sunday, December 23, 12
![Page 44: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/44.jpg)
方法 6
Sunday, December 23, 12
![Page 45: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/45.jpg)
Acme::Test を使う
Sunday, December 23, 12
![Page 46: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/46.jpg)
Sunday, December 23, 12
![Page 47: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/47.jpg)
例とか無いです
Sunday, December 23, 12
![Page 48: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/48.jpg)
とまあこんな感じで
Sunday, December 23, 12
![Page 49: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/49.jpg)
浮動小数点数めんどい
Sunday, December 23, 12
![Page 50: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/50.jpg)
ただ
Sunday, December 23, 12
![Page 51: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/51.jpg)
浮動小数点数めんどい
Sunday, December 23, 12
![Page 52: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/52.jpg)
浮動小数点数めんどい
テストめんどい
Sunday, December 23, 12
![Page 53: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/53.jpg)
浮動小数点数めんどい
テストめんどい
こうなるとまずい
Sunday, December 23, 12
![Page 54: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/54.jpg)
「テストこけるけど動くから大丈夫だよー」
「めんどいからテストしなくてもいいよー」
「“cpanm -f Foo::Bar” でおk」
Sunday, December 23, 12
![Page 55: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/55.jpg)
「テストこけるけど動くから大丈夫だよー」
「めんどいからテストしなくてもいいよー」
「“cpanm -f Foo::Bar” でおk」
破滅待ったなし
Sunday, December 23, 12
![Page 56: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/56.jpg)
テストを蔑ろにしてはならない
Sunday, December 23, 12
![Page 57: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/57.jpg)
その為には?
Sunday, December 23, 12
![Page 58: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/58.jpg)
1Sunday, December 23, 12
![Page 59: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/59.jpg)
テストがすぐ実行できて軽いこと
こまめにテストを走らせられる(物理的 | 心理的)環境を整える
Sunday, December 23, 12
![Page 60: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/60.jpg)
2Sunday, December 23, 12
![Page 61: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/61.jpg)
テストが書きやすいこと
書きやすければ書きやすい程テストの習慣は定着する
Sunday, December 23, 12
![Page 62: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/62.jpg)
テストの書きやすさ、マジ重要!
Sunday, December 23, 12
![Page 63: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/63.jpg)
というわけで、浮動小数点のテストを支えるモジュールが有るとハッピー
Sunday, December 23, 12
![Page 64: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/64.jpg)
例えばTest::Number::Delta
Sunday, December 23, 12
![Page 65: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/65.jpg)
方法3 として挙げた採択域うんぬんのテストをサポートしてくれる
Sunday, December 23, 12
![Page 66: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/66.jpg)
TODO こんなかんじ
e.!.
(デフォルトだと1-e6 が採択域)
Sunday, December 23, 12
![Page 67: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/67.jpg)
Cool !
Sunday, December 23, 12
![Page 68: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/68.jpg)
名前的にTest::Float
もイケそうだけど使ったことないです
Sunday, December 23, 12
![Page 69: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/69.jpg)
あと今Test::LimitDecimalPlacesというモジュールを書いてます
https://!ithub.com/moznion/Test--LimitDecimalPlaces
Sunday, December 23, 12
![Page 70: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/70.jpg)
方法5 として挙げたsprintf() を使って
テスト出来るモジュールです(ヘルパーメソッド的な)
Sunday, December 23, 12
![Page 71: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/71.jpg)
こんな感じで使えます
Sunday, December 23, 12
![Page 72: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/72.jpg)
内部的にはこんな感じ
Sunday, December 23, 12
![Page 73: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/73.jpg)
ただ問題が
Sunday, December 23, 12
![Page 74: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/74.jpg)
Test::LimitDecimalPlaces
Sunday, December 23, 12
![Page 75: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/75.jpg)
Test::LimitDecimalPlaces名前がダサい
Sunday, December 23, 12
![Page 76: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/76.jpg)
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_by
Sunday, December 23, 12
![Page 77: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/77.jpg)
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_byメソッド名がダサい
Sunday, December 23, 12
![Page 78: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/78.jpg)
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_byメソッド名がダサい
そもそも英文法的に怪しい
Sunday, December 23, 12
![Page 79: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/79.jpg)
とりあえずPrePAN に投げて反応を待とうかと思っています
Sunday, December 23, 12
![Page 80: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/80.jpg)
アドバイス目下募集中です
よろしくお願いします。
Sunday, December 23, 12
![Page 81: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/81.jpg)
あと、他にも浮動小数点数周りの良いテストモジュールがあれば教えてください
Sunday, December 23, 12
![Page 82: Hokkaido pm 8 LT](https://reader033.vdocuments.net/reader033/viewer/2022042814/555e7f6bd8b42a41328b5069/html5/thumbnails/82.jpg)
了
Sunday, December 23, 12