Hokkaido pm 8 LT

82
Hokkaido.pm #8 Lihtnin Talk Hachioji.pm / Kokusaitenjijomae.pm @moznion Sunday, December 23, 12

description

Hokkaido.pm #8 向けのLT 資料です 浮動小数点数のテストについて (?)

Transcript of Hokkaido pm 8 LT

Page 1: Hokkaido pm 8 LT

Hokkaido.pm #8Li!htnin! Talk

Hachioji.pm / Kokusaitenjijomae.pm@moznion

Sunday, December 23, 12

Page 2: Hokkaido pm 8 LT

@moznion大学生アルバイトソフトウェアエンジニア

2年前まで道民でした

2日前に論文がリジェクトされたのでブルー入ってます

Sunday, December 23, 12

Page 3: Hokkaido pm 8 LT

クリスマスらしくAcme の話……

Sunday, December 23, 12

Page 4: Hokkaido pm 8 LT

はしません

クリスマスらしくAcme の話……

Sunday, December 23, 12

Page 5: Hokkaido pm 8 LT

皆さんPerl で数値計算してますか!?

Sunday, December 23, 12

Page 6: Hokkaido pm 8 LT

数値計算してるとクソ面倒なアイツがいますよね

Sunday, December 23, 12

Page 7: Hokkaido pm 8 LT

浮動小数点数

Sunday, December 23, 12

Page 8: Hokkaido pm 8 LT

浮動小数点数めんどい

Sunday, December 23, 12

Page 9: Hokkaido pm 8 LT

浮動小数点数めんどい今日はこれについて

Sunday, December 23, 12

Page 10: Hokkaido pm 8 LT

さて拙作のモジュールでハマったこと

Sunday, December 23, 12

Page 11: Hokkaido pm 8 LT

浮動小数点数をこんな感じでテストすると死ねます

Sunday, December 23, 12

Page 12: Hokkaido pm 8 LT

Sunday, December 23, 12

Page 13: Hokkaido pm 8 LT

見るからにやばそうSunday, December 23, 12

Page 14: Hokkaido pm 8 LT

こういう事をするとテストがズッコケる環境が出てくる

Sunday, December 23, 12

Page 15: Hokkaido pm 8 LT

ぐぬぬ…

Sunday, December 23, 12

Page 16: Hokkaido pm 8 LT

ありがたいことにISSUE が来る

(@syohex さんありがとうございます)

Sunday, December 23, 12

Page 17: Hokkaido pm 8 LT

ISSUE が来る(ありがたいことに)

https://!ithub.com/moznion/Math--PhaseOnlyCorrelation/issues/1

Sunday, December 23, 12

Page 18: Hokkaido pm 8 LT

浮動小数は色々めんどいから普通に比較するとダメよ、

とのこと† 以下が詳しい x86における浮動小数点演算の精度の制御と、 80bit 浮動小数点演算問題 http://www.takeoka.or!/~take/cpu/num/float80bit.html

Sunday, December 23, 12

Page 19: Hokkaido pm 8 LT

あとCPAN Testers Daily

Summary Reportからも毎日メールが来る

(深夜に)

Sunday, December 23, 12

Page 20: Hokkaido pm 8 LT

そしてCPAN Testers Daily

Summary Reportから毎日メールが来る

夜も眠れない!!(Report はありがたいんですが)

Sunday, December 23, 12

Page 21: Hokkaido pm 8 LT

夜は眠りたいので直しましょう

Sunday, December 23, 12

Page 22: Hokkaido pm 8 LT

方法 1

Sunday, December 23, 12

Page 23: Hokkaido pm 8 LT

小数点以下を切り捨てて整数にしてからテストをする

Sunday, December 23, 12

Page 24: Hokkaido pm 8 LT

TODO こんなかんじ

e.!.

Sunday, December 23, 12

Page 25: Hokkaido pm 8 LT

e.!.

TODO こんなかんじまさに外道!!!

Sunday, December 23, 12

Page 26: Hokkaido pm 8 LT

悪党な方法過ぎて駄目そもそもテストの正当性が

失われている

Sunday, December 23, 12

Page 27: Hokkaido pm 8 LT

方法 2

Sunday, December 23, 12

Page 28: Hokkaido pm 8 LT

$var * 10 ^ $numしてから小数点以下を切り捨ててテストする

Sunday, December 23, 12

Page 29: Hokkaido pm 8 LT

e.!.

Sunday, December 23, 12

Page 30: Hokkaido pm 8 LT

$num 桁までの精度は保証される

ただ、ちょっとダサい (主観)

Sunday, December 23, 12

Page 31: Hokkaido pm 8 LT

あと、整数桁数が莫大に増えたら

それもそれで問題な気が

Sunday, December 23, 12

Page 32: Hokkaido pm 8 LT

方法 3

Sunday, December 23, 12

Page 33: Hokkaido pm 8 LT

採択域を設定して、両者の差がその範囲内かを

テストする

Sunday, December 23, 12

Page 34: Hokkaido pm 8 LT

TODO こんなかんじ

e.!.

Sunday, December 23, 12

Page 35: Hokkaido pm 8 LT

割と良い感じ。拙作のモジュールでも

一時期 (3日くらい) やってた

Sunday, December 23, 12

Page 36: Hokkaido pm 8 LT

方法 4

Sunday, December 23, 12

Page 37: Hokkaido pm 8 LT

正規表現でバツンと切って小数桁数を制限する

Sunday, December 23, 12

Page 38: Hokkaido pm 8 LT

e.!.

Sunday, December 23, 12

Page 39: Hokkaido pm 8 LT

結構メイジャーな方法っぽい(特にPhysics のモジュールで)けど、なんかやだ (主観)

Sunday, December 23, 12

Page 40: Hokkaido pm 8 LT

方法 5

Sunday, December 23, 12

Page 41: Hokkaido pm 8 LT

sprintf(“%.${num}f”, $var)を使って桁数を制限する

Sunday, December 23, 12

Page 42: Hokkaido pm 8 LT

e.!.

Sunday, December 23, 12

Page 43: Hokkaido pm 8 LT

これが一番しっくり来た。なんか良い感じ

(Math のモジュールで良く見かける)

Sunday, December 23, 12

Page 44: Hokkaido pm 8 LT

方法 6

Sunday, December 23, 12

Page 45: Hokkaido pm 8 LT

Acme::Test を使う

Sunday, December 23, 12

Page 46: Hokkaido pm 8 LT

Sunday, December 23, 12

Page 47: Hokkaido pm 8 LT

例とか無いです

Sunday, December 23, 12

Page 48: Hokkaido pm 8 LT

とまあこんな感じで

Sunday, December 23, 12

Page 49: Hokkaido pm 8 LT

浮動小数点数めんどい

Sunday, December 23, 12

Page 50: Hokkaido pm 8 LT

ただ

Sunday, December 23, 12

Page 51: Hokkaido pm 8 LT

浮動小数点数めんどい

Sunday, December 23, 12

Page 52: Hokkaido pm 8 LT

浮動小数点数めんどい

テストめんどい

Sunday, December 23, 12

Page 53: Hokkaido pm 8 LT

浮動小数点数めんどい

テストめんどい

こうなるとまずい

Sunday, December 23, 12

Page 54: Hokkaido pm 8 LT

「テストこけるけど動くから大丈夫だよー」

「めんどいからテストしなくてもいいよー」

「“cpanm -f Foo::Bar” でおk」

Sunday, December 23, 12

Page 55: Hokkaido pm 8 LT

「テストこけるけど動くから大丈夫だよー」

「めんどいからテストしなくてもいいよー」

「“cpanm -f Foo::Bar” でおk」

破滅待ったなし

Sunday, December 23, 12

Page 56: Hokkaido pm 8 LT

テストを蔑ろにしてはならない

Sunday, December 23, 12

Page 57: Hokkaido pm 8 LT

その為には?

Sunday, December 23, 12

Page 58: Hokkaido pm 8 LT

1Sunday, December 23, 12

Page 59: Hokkaido pm 8 LT

テストがすぐ実行できて軽いこと

こまめにテストを走らせられる(物理的 | 心理的)環境を整える

Sunday, December 23, 12

Page 60: Hokkaido pm 8 LT

2Sunday, December 23, 12

Page 61: Hokkaido pm 8 LT

テストが書きやすいこと

書きやすければ書きやすい程テストの習慣は定着する

Sunday, December 23, 12

Page 62: Hokkaido pm 8 LT

テストの書きやすさ、マジ重要!

Sunday, December 23, 12

Page 63: Hokkaido pm 8 LT

というわけで、浮動小数点のテストを支えるモジュールが有るとハッピー

Sunday, December 23, 12

Page 64: Hokkaido pm 8 LT

例えばTest::Number::Delta

Sunday, December 23, 12

Page 65: Hokkaido pm 8 LT

方法3 として挙げた採択域うんぬんのテストをサポートしてくれる

Sunday, December 23, 12

Page 66: Hokkaido pm 8 LT

TODO こんなかんじ

e.!.

(デフォルトだと1-e6 が採択域)

Sunday, December 23, 12

Page 67: Hokkaido pm 8 LT

Cool !

Sunday, December 23, 12

Page 68: Hokkaido pm 8 LT

名前的にTest::Float

もイケそうだけど使ったことないです

Sunday, December 23, 12

Page 69: Hokkaido pm 8 LT

あと今Test::LimitDecimalPlacesというモジュールを書いてます

https://!ithub.com/moznion/Test--LimitDecimalPlaces

Sunday, December 23, 12

Page 70: Hokkaido pm 8 LT

方法5 として挙げたsprintf() を使って

テスト出来るモジュールです(ヘルパーメソッド的な)

Sunday, December 23, 12

Page 71: Hokkaido pm 8 LT

こんな感じで使えます

Sunday, December 23, 12

Page 72: Hokkaido pm 8 LT

内部的にはこんな感じ

Sunday, December 23, 12

Page 73: Hokkaido pm 8 LT

ただ問題が

Sunday, December 23, 12

Page 74: Hokkaido pm 8 LT

Test::LimitDecimalPlaces

Sunday, December 23, 12

Page 75: Hokkaido pm 8 LT

Test::LimitDecimalPlaces名前がダサい

Sunday, December 23, 12

Page 76: Hokkaido pm 8 LT

limit_oklimit_ok_bylimit_not_ok

limit_not_ok_by

Sunday, December 23, 12

Page 77: Hokkaido pm 8 LT

limit_oklimit_ok_bylimit_not_ok

limit_not_ok_byメソッド名がダサい

Sunday, December 23, 12

Page 78: Hokkaido pm 8 LT

limit_oklimit_ok_bylimit_not_ok

limit_not_ok_byメソッド名がダサい

そもそも英文法的に怪しい

Sunday, December 23, 12

Page 79: Hokkaido pm 8 LT

とりあえずPrePAN に投げて反応を待とうかと思っています

Sunday, December 23, 12

Page 80: Hokkaido pm 8 LT

アドバイス目下募集中です

よろしくお願いします。

Sunday, December 23, 12

Page 81: Hokkaido pm 8 LT

あと、他にも浮動小数点数周りの良いテストモジュールがあれば教えてください

Sunday, December 23, 12

Page 82: Hokkaido pm 8 LT

Sunday, December 23, 12