Open takashiyamazaki opened 9 years ago
プログラミングにどう生きるのか?
なんで1にならないんだっけ?
3.1999998はどこで切り捨ててるのか?
irb(main):001:0> f = 0.00001
=> 1.0e-05
irb(main):002:0> f.to_i
=> 0
irb(main):003:0>
ネットワーク環境がうまくいきません
正確さを取るか、より多くの数を表現する方を取るか (固定小数点、浮動小数点)
irb(main):009:0> i = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 0.7
irb(main):006:0> i = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 0.8999999999999999
irb(main):007:0> i = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 0.9999999999999999
irb(main):011:0> i = (0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1).to_i
=> 0
irb(main):012:0> 0.1 * 10
=> 1.0
なんでだっけ?
irb(main):003:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 2.0000000000000004
javascript(chrome)も
> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
< 0.9999999999999999
irb(main):004:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.9000000000000006
irb(main):005:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.8000000000000005
irb(main):006:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.7000000000000004
irb(main):007:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.6000000000000003
irb(main):008:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.5000000000000002
irb(main):009:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.4000000000000001
irb(main):010:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.3
irb(main):011:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.2
irb(main):012:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 1.0999999999999999
irb(main):013:0> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
=> 0.9999999999999999
0.2どんどん足してくやつだとまた違った結果に
js(chrome)
> parseInt(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1)
< 0
浮動小数点誤差対策 : http://doruby.kbmj.com/note/20150209/1
浮動小数点は上にずれることも下にずれることもあるのが対応難しい…
[Ruby]消費税計算にはBigDecimalを使いましょう - Qiita : http://qiita.com/jnchito/items/d0ef71b25732ad5a881c
HTMLの座標をJavascriptで計算したりすると、ずれちゃうことある ページスクロールをJSでやったときとか、位置がずれて気になる
スプレッドシート =CEILING(1800*1.08) 1944
irb(main):031:0> 0.001 * 100
=> 0.1
irb(main):032:0> 0.011 * 100
=> 1.0999999999999999
irb(main):035:0> 1.1 * 100
=> 110.00000000000001
ssuzukiさん「浮動小数点で==とかやっても合わない」
irb(main):036:0> 1.1 * 10 == 11.0
=> true
irb(main):037:0> 1.1 * 100 == 110.0
=> false
「駅すぱあとの経路探索は整数だけ使えば良いので大丈夫です」キリッ
あー緯度経度
山崎、添田、廣戸