SlideShare a Scribd company logo
1 of 14
Download to read offline
そもそもFloatとは
@akuraru
13年9月25日水曜日
自己紹介
• akuraru
• プログラマ
• SQLAPですがDBの話はしない
13年9月25日水曜日
数値
• 機械は2進数しか理解できない。
• すべて0又は1で表現されている
• 4 = 100
• 10 = 1010
13年9月25日水曜日
小数点
• 小数点以下も0又は1で表す
• 2進数なので(1/2)**nで表す
• 0.5 = 0.1
• 0.125 = 0.001
13年9月25日水曜日
小数点
• 0.1 とかはどうなるの?
• 循環小数で表す
• 0.1 = 0.00011
• 0011が無限に続ければ0.1を表せる
13年9月25日水曜日
Float
• 実際のメモリ領域は有限
• ある程度のところで切り上げている
• 0.1 = 0.00011001100110011001100110011
13年9月25日水曜日
Float
• ある程度とはどのくらい?
• その前に仮数と、指数というのがある
• 1001100110011001100110011が仮数
• -4が指数
• 0.1 = 1.1001100110011001100110011 * 10^-4
13年9月25日水曜日
Float
• C言語の場合
• Floatの指数8ビット、仮数23ビット
• double の指数11ビット、仮数52ビット
13年9月25日水曜日
Floatの問題
• いろいろな誤差がある。
• オーバーフロー
• 桁落ち
• 情報落ち
• 積み残し
• 丸め誤差
• ってWikipediaに書いてあった。
13年9月25日水曜日
• SQLAPということで丸め誤差だけ説明
します
• 他はググってください
13年9月25日水曜日
丸め誤差
• 0.1 を100倍して 10 になると思うな!
• 10 = 1010
• 0.1 = 0.00011001100110011001100110011
• 100 = 1100100
• 0.1 * 100 = 1001.11111111111...
13年9月25日水曜日
DECIMAL
• ちゃんと調べてない。
• 2進数で0.1をそのまま表すからよくない
• 1 * 10 ^ -1 と表せば解決
• DBには1を保存して取り出すときに10で
割ればいい。
13年9月25日水曜日
計算式を保存する
• 0.1なんていう結果を保存するから良く
ない
• 計算過程を保存しておけば安全
• div(1, 10)とか保存しておくばいい
•
13年9月25日水曜日
まとめ
• プログラミング言語でもFloatをforで足
していくのも誤差が出ます
• 整数で計算して、必要なときに割る
13年9月25日水曜日

More Related Content

More from Akura Pi

ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合Akura Pi
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイルAkura Pi
 
Metaprogramming
MetaprogrammingMetaprogramming
MetaprogrammingAkura Pi
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaultsAkura Pi
 
Storyboard
StoryboardStoryboard
StoryboardAkura Pi
 
Mvcのすすめ
MvcのすすめMvcのすすめ
MvcのすすめAkura Pi
 
Groovy base
Groovy baseGroovy base
Groovy baseAkura Pi
 

More from Akura Pi (8)

ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイル
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaults
 
Currying
CurryingCurrying
Currying
 
Storyboard
StoryboardStoryboard
Storyboard
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
 
Groovy base
Groovy baseGroovy base
Groovy base
 

そもそもFloatとは