Hokkaido pm 8 LT
description
Transcript of Hokkaido pm 8 LT
Hokkaido.pm #8Li!htnin! Talk
Hachioji.pm / Kokusaitenjijomae.pm@moznion
Sunday, December 23, 12
@moznion大学生アルバイトソフトウェアエンジニア
2年前まで道民でした
2日前に論文がリジェクトされたのでブルー入ってます
Sunday, December 23, 12
クリスマスらしくAcme の話……
Sunday, December 23, 12
はしません
クリスマスらしくAcme の話……
Sunday, December 23, 12
皆さんPerl で数値計算してますか!?
Sunday, December 23, 12
数値計算してるとクソ面倒なアイツがいますよね
Sunday, December 23, 12
浮動小数点数
Sunday, December 23, 12
浮動小数点数めんどい
Sunday, December 23, 12
浮動小数点数めんどい今日はこれについて
Sunday, December 23, 12
さて拙作のモジュールでハマったこと
Sunday, December 23, 12
浮動小数点数をこんな感じでテストすると死ねます
Sunday, December 23, 12
Sunday, December 23, 12
見るからにやばそうSunday, December 23, 12
こういう事をするとテストがズッコケる環境が出てくる
Sunday, December 23, 12
ぐぬぬ…
Sunday, December 23, 12
ありがたいことにISSUE が来る
(@syohex さんありがとうございます)
Sunday, December 23, 12
ISSUE が来る(ありがたいことに)
https://!ithub.com/moznion/Math--PhaseOnlyCorrelation/issues/1
Sunday, December 23, 12
浮動小数は色々めんどいから普通に比較するとダメよ、
とのこと† 以下が詳しい x86における浮動小数点演算の精度の制御と、 80bit 浮動小数点演算問題 http://www.takeoka.or!/~take/cpu/num/float80bit.html
Sunday, December 23, 12
あとCPAN Testers Daily
Summary Reportからも毎日メールが来る
(深夜に)
Sunday, December 23, 12
そしてCPAN Testers Daily
Summary Reportから毎日メールが来る
夜も眠れない!!(Report はありがたいんですが)
Sunday, December 23, 12
夜は眠りたいので直しましょう
Sunday, December 23, 12
方法 1
Sunday, December 23, 12
小数点以下を切り捨てて整数にしてからテストをする
Sunday, December 23, 12
TODO こんなかんじ
e.!.
Sunday, December 23, 12
e.!.
TODO こんなかんじまさに外道!!!
Sunday, December 23, 12
悪党な方法過ぎて駄目そもそもテストの正当性が
失われている
Sunday, December 23, 12
方法 2
Sunday, December 23, 12
$var * 10 ^ $numしてから小数点以下を切り捨ててテストする
Sunday, December 23, 12
e.!.
Sunday, December 23, 12
$num 桁までの精度は保証される
ただ、ちょっとダサい (主観)
Sunday, December 23, 12
あと、整数桁数が莫大に増えたら
それもそれで問題な気が
Sunday, December 23, 12
方法 3
Sunday, December 23, 12
採択域を設定して、両者の差がその範囲内かを
テストする
Sunday, December 23, 12
TODO こんなかんじ
e.!.
Sunday, December 23, 12
割と良い感じ。拙作のモジュールでも
一時期 (3日くらい) やってた
Sunday, December 23, 12
方法 4
Sunday, December 23, 12
正規表現でバツンと切って小数桁数を制限する
Sunday, December 23, 12
e.!.
Sunday, December 23, 12
結構メイジャーな方法っぽい(特にPhysics のモジュールで)けど、なんかやだ (主観)
Sunday, December 23, 12
方法 5
Sunday, December 23, 12
sprintf(“%.${num}f”, $var)を使って桁数を制限する
Sunday, December 23, 12
e.!.
Sunday, December 23, 12
これが一番しっくり来た。なんか良い感じ
(Math のモジュールで良く見かける)
Sunday, December 23, 12
方法 6
Sunday, December 23, 12
Acme::Test を使う
Sunday, December 23, 12
Sunday, December 23, 12
例とか無いです
Sunday, December 23, 12
とまあこんな感じで
Sunday, December 23, 12
浮動小数点数めんどい
Sunday, December 23, 12
ただ
Sunday, December 23, 12
浮動小数点数めんどい
Sunday, December 23, 12
浮動小数点数めんどい
テストめんどい
Sunday, December 23, 12
浮動小数点数めんどい
テストめんどい
こうなるとまずい
Sunday, December 23, 12
「テストこけるけど動くから大丈夫だよー」
「めんどいからテストしなくてもいいよー」
「“cpanm -f Foo::Bar” でおk」
Sunday, December 23, 12
「テストこけるけど動くから大丈夫だよー」
「めんどいからテストしなくてもいいよー」
「“cpanm -f Foo::Bar” でおk」
破滅待ったなし
Sunday, December 23, 12
テストを蔑ろにしてはならない
Sunday, December 23, 12
その為には?
Sunday, December 23, 12
1Sunday, December 23, 12
テストがすぐ実行できて軽いこと
こまめにテストを走らせられる(物理的 | 心理的)環境を整える
Sunday, December 23, 12
2Sunday, December 23, 12
テストが書きやすいこと
書きやすければ書きやすい程テストの習慣は定着する
Sunday, December 23, 12
テストの書きやすさ、マジ重要!
Sunday, December 23, 12
というわけで、浮動小数点のテストを支えるモジュールが有るとハッピー
Sunday, December 23, 12
例えばTest::Number::Delta
Sunday, December 23, 12
方法3 として挙げた採択域うんぬんのテストをサポートしてくれる
Sunday, December 23, 12
TODO こんなかんじ
e.!.
(デフォルトだと1-e6 が採択域)
Sunday, December 23, 12
Cool !
Sunday, December 23, 12
名前的にTest::Float
もイケそうだけど使ったことないです
Sunday, December 23, 12
あと今Test::LimitDecimalPlacesというモジュールを書いてます
https://!ithub.com/moznion/Test--LimitDecimalPlaces
Sunday, December 23, 12
方法5 として挙げたsprintf() を使って
テスト出来るモジュールです(ヘルパーメソッド的な)
Sunday, December 23, 12
こんな感じで使えます
Sunday, December 23, 12
内部的にはこんな感じ
Sunday, December 23, 12
ただ問題が
Sunday, December 23, 12
Test::LimitDecimalPlaces
Sunday, December 23, 12
Test::LimitDecimalPlaces名前がダサい
Sunday, December 23, 12
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_by
Sunday, December 23, 12
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_byメソッド名がダサい
Sunday, December 23, 12
limit_oklimit_ok_bylimit_not_ok
limit_not_ok_byメソッド名がダサい
そもそも英文法的に怪しい
Sunday, December 23, 12
とりあえずPrePAN に投げて反応を待とうかと思っています
Sunday, December 23, 12
アドバイス目下募集中です
よろしくお願いします。
Sunday, December 23, 12
あと、他にも浮動小数点数周りの良いテストモジュールがあれば教えてください
Sunday, December 23, 12
了
Sunday, December 23, 12