Suche senden
Hochladen
浮動小数点数の話 2013年度版
•
16 gefällt mir
•
10,475 views
Yoshio Hanawa
Folgen
第70回PHP勉強会の発表資料です。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 29
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
Hiromu Shioya
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?
Seiichiro Ishida
第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話
第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話
Ryo Shibayama
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
Yokohama North Meetup #2
Yokohama North Meetup #2
Kazuaki KURIU
Organizácia školského roka 2014/2015 na ZŠ Vazovova 4 Bratislava
Organizácia školského roka 2014/2015 na ZŠ Vazovova 4 Bratislava
PROMOSPRAVY.sk
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
計算機理論入門03
計算機理論入門03
Tomoyuki Tarumi
Empfohlen
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
Hiromu Shioya
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?
Seiichiro Ishida
第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話
第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話
Ryo Shibayama
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
Yokohama North Meetup #2
Yokohama North Meetup #2
Kazuaki KURIU
Organizácia školského roka 2014/2015 na ZŠ Vazovova 4 Bratislava
Organizácia školského roka 2014/2015 na ZŠ Vazovova 4 Bratislava
PROMOSPRAVY.sk
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
計算機理論入門03
計算機理論入門03
Tomoyuki Tarumi
Slide keieisystem2012
Slide keieisystem2012
ISE_SE_HOSEI
計算機理論入門04
計算機理論入門04
Tomoyuki Tarumi
計算機理論入門07
計算機理論入門07
Tomoyuki Tarumi
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
Tokai University
計算機理論入門05
計算機理論入門05
Tomoyuki Tarumi
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
AtCoder Inc.
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
tomoaki0705
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
technologicarts
整数列圧縮
整数列圧縮
JAVA DM
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
MROC Japan
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
Tetsuya Yoshida
kagami_comput2015_12
kagami_comput2015_12
swkagami
科学技術コミュニケーションの原点と座標軸20150517(本編)
科学技術コミュニケーションの原点と座標軸20150517(本編)
Professional University of Information and Management for Innovation (情報経営イノベーション専門職大学)
kagami_comput2016_08
kagami_comput2016_08
swkagami
kagami_comput2016_06
kagami_comput2016_06
swkagami
kagami_comput2016_09
kagami_comput2016_09
swkagami
kagami_comput2016_05
kagami_comput2016_05
swkagami
kagami_comput2016_07
kagami_comput2016_07
swkagami
3_C言語入門 - C言語の基本
3_C言語入門 - C言語の基本
bc_rikko
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
Weitere ähnliche Inhalte
Andere mochten auch
Slide keieisystem2012
Slide keieisystem2012
ISE_SE_HOSEI
計算機理論入門04
計算機理論入門04
Tomoyuki Tarumi
計算機理論入門07
計算機理論入門07
Tomoyuki Tarumi
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
Tokai University
計算機理論入門05
計算機理論入門05
Tomoyuki Tarumi
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
AtCoder Inc.
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
tomoaki0705
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
technologicarts
整数列圧縮
整数列圧縮
JAVA DM
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
MROC Japan
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
Tetsuya Yoshida
kagami_comput2015_12
kagami_comput2015_12
swkagami
科学技術コミュニケーションの原点と座標軸20150517(本編)
科学技術コミュニケーションの原点と座標軸20150517(本編)
Professional University of Information and Management for Innovation (情報経営イノベーション専門職大学)
kagami_comput2016_08
kagami_comput2016_08
swkagami
kagami_comput2016_06
kagami_comput2016_06
swkagami
kagami_comput2016_09
kagami_comput2016_09
swkagami
kagami_comput2016_05
kagami_comput2016_05
swkagami
kagami_comput2016_07
kagami_comput2016_07
swkagami
3_C言語入門 - C言語の基本
3_C言語入門 - C言語の基本
bc_rikko
Andere mochten auch
(20)
Slide keieisystem2012
Slide keieisystem2012
計算機理論入門04
計算機理論入門04
計算機理論入門07
計算機理論入門07
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
計算機理論入門05
計算機理論入門05
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
整数列圧縮
整数列圧縮
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
kagami_comput2015_12
kagami_comput2015_12
科学技術コミュニケーションの原点と座標軸20150517(本編)
科学技術コミュニケーションの原点と座標軸20150517(本編)
kagami_comput2016_08
kagami_comput2016_08
kagami_comput2016_06
kagami_comput2016_06
kagami_comput2016_09
kagami_comput2016_09
kagami_comput2016_05
kagami_comput2016_05
kagami_comput2016_07
kagami_comput2016_07
3_C言語入門 - C言語の基本
3_C言語入門 - C言語の基本
Mehr von Yoshio Hanawa
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
Yoshio Hanawa
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
Yoshio Hanawa
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
Yoshio Hanawa
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
Yoshio Hanawa
GitHubからお金をもらった話
GitHubからお金をもらった話
Yoshio Hanawa
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
Yoshio Hanawa
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
Yoshio Hanawa
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Yoshio Hanawa
Laungage Update PHP編
Laungage Update PHP編
Yoshio Hanawa
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
Yoshio Hanawa
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
Yoshio Hanawa
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
Yoshio Hanawa
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
Yoshio Hanawa
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
PHPの正規表現と最長一致
PHPの正規表現と最長一致
Yoshio Hanawa
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
Yoshio Hanawa
Mehr von Yoshio Hanawa
(20)
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
GitHubからお金をもらった話
GitHubからお金をもらった話
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Laungage Update PHP編
Laungage Update PHP編
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
PHPの正規表現と最長一致
PHPの正規表現と最長一致
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
浮動小数点数の話 2013年度版
1.
浮動小数点数の話 2013年度版 hnw 第70回PHP勉強会(2013/07/22) 発表資料 13年7月23日火曜日
2.
自己紹介 @hnw / id:hnw 勤務先:KLab株式会社 カレーとバグが大好物 最近の興味:Zend
OPcache 改造しがいがある、最近イチオシのオモチャ 13年7月23日火曜日
3.
今日おはなしすること 浮動小数点数の怖い話 round関数の近況 MySQLでの小数の扱い 13年7月23日火曜日
4.
浮動小数点数の怖い話 round関数の近況 MySQLでの小数の扱い 13年7月23日火曜日
5.
浮動小数点数の怖い話(1) 例:ゲーム内のアイテムの売買機能 プレイヤーはアイテムを店で定価で買える 定価の10%増しで、NPCが買い取ってくれる 端数が出た場合、小数点以下切り上げ(5.5→6) 13年7月23日火曜日
6.
浮動小数点数の怖い話(1) 例:ゲーム内のアイテムの売買機能 プレイヤーはアイテムを店で定価で買える 定価の10%増しで、NPCが買い取ってくれる 端数が出た場合、小数点以下切り上げ(5.5→6) 罠に気づきましたか? 13年7月23日火曜日
7.
浮動小数点数の怖い話(2) 定価100コインのアイテムの売価が111コインになる! 100の10%増しなら110 のはずでは…? 実験してみる(1.1倍して切り上げ) 13年7月23日火曜日
8.
何が問題だったか? 1.1倍したのが問題 1.0や0.5はピッタリ表現できるが、0.1だと誤差が入る 11.0倍して10.0で割っていれば問題なかった 13年7月23日火曜日
9.
補足(1) 浮動小数点数の性質からくる問題 浮動小数点数は2進数なので、1/5は循環小数になる 有限桁(53bit)で打ち切られるので、誤差が入る PHPに限らず、多くの言語で起こる現象 10進小数クラスや有理数クラスを持つ言語もある 13年7月23日火曜日
10.
補足(2) 浮動小数点数演算で誤差を避ける方法は? 浮動小数点数で「ピッタリ」表せる数を使うこと 誤差が入りうる計算を後回しにすること 整数演算だけで済む仕様に誘導するのも手 13年7月23日火曜日
11.
補足(3) 浮動小数点数で無理ならgmp関数を使ってもよい BC Mathは素性が不明だわ遅いわでイマイチな印象 「その処理をPHPでやるのが正解か?」も要検討 13年7月23日火曜日
12.
浮動小数点数の怖い話 round関数の近況 MySQLでの小数の扱い 13年7月23日火曜日
13.
こんなことがありました PHP 5.2.xのround関数の実装がイマイチというネタで炎上 http://d.hatena.ne.jp/hnw/20070515 日記書き始めて10エントリ目くらいだった まつもとゆきひろさんの日記で言及→DIS大会 13年7月23日火曜日
14.
応戦してた どう見てもヤバい人です。 13年7月23日火曜日
15.
当時のround関数の概要 round(x)の実装が普通と違った 普通の実装:x > 0
なら floor(x+0.5) PHPの実装:x > 0 なら floor(x+0.50000000001) 13年7月23日火曜日
16.
当時のround関数の概要 round(x)の実装が普通と違った 普通の実装:x > 0
なら floor(x+0.5) PHPの実装:x > 0 なら floor(x+0.50000000001) ↑ 意味わからん 13年7月23日火曜日
17.
議論の概要 PHP以外の人「これだからPHPは」 僕「指摘が浮動小数点数的に間違ってるけど?」 「RubyやPythonやPerlのコレもバグじゃね?」 浮動小数点数まわりのバグが結構見つかった PHPがひどい点については基本スルー 13年7月23日火曜日
18.
今どうなってるか(1) PHP 5.3以降、round関数の仕様と実装が変わりました 詳細:https://wiki.php.net/rfc/rounding x >
0 なら floor(x+0.5) と、他の言語と同様の実装 大きい数にだけ起こる、直しにくいバグが残っている http://d.hatena.ne.jp/hnw/20110407 13年7月23日火曜日
19.
今どうなってるか(2) 僕が当時指摘したバグはRuby 1.8.7とPython 2.7.3で すべて修正されている すげえ! なおPerl
5.14.4では修正されていない模様 13年7月23日火曜日
20.
浮動小数点数の怖い話 round関数の近況 MySQLでの小数の扱い 13年7月23日火曜日
21.
MySQLでの小数 小数リテラルは固定小数点数になる 固定小数点数=桁数と小数点の位置が決まっている表現 MySQLではDECIMAL型が対応する DECIMAL(10, 2) :
全10桁、小数以下2桁 13年7月23日火曜日
22.
固定小数点数の世界 誤差の問題から解放される これで平和が訪れた! = true 13年7月23日火曜日
23.
固定小数点数の世界 誤差の問題から解放される これで平和が訪れた! と思ったでしょ?残念! = true 13年7月23日火曜日
24.
浮動小数点数の恐怖再び 文字列リテラルに対して加減算→自動キャスト 文字列を数値にキャスト→浮動小数点数になる = false 13年7月23日火曜日
25.
イマイチなPDOの仕様 PDOはプレースホルダの展開時に PHP変数の型が文字列なら必ずクォーティングする PDO::PARAM_INTの指定はbool型のみ影響する 参照:http://stackoverflow.com/questions/833510/ php-pdobindparam-data-types-how-does-it-work 数値なのに文字列型になっている場合は要注意 13年7月23日火曜日
26.
小数を避ければ平気か 「DB上で小数なんて使わないから自分には関係ない」 とか思ってませんか 小数点が無くても浮動小数点数を経由します = true 13年7月23日火曜日
27.
何が起きたのか? 文字列をキャストして浮動小数点数になった 2^53以上の整数は浮動小数点数で正しく表現できない 前のページの例では、1を足したはずが2増えた 10進で16桁以上の整数を扱う場合は要注意 BIGINT型など 13年7月23日火曜日
28.
まとめ 浮動小数点数は罠がたくさん 罠を避けるには知識が必要 PHPのround関数は昔よりマトモになった MySQLにも浮動小数点数の罠がある PHPだとPDOがイマイチなせいで罠を踏みやすい 13年7月23日火曜日
29.
ご静聴 ありがとう ございました 13年7月23日火曜日
Jetzt herunterladen