RSS

 

RSS


今週、会社で「小数を分数に直すにはどうする?」が話題になった。


■覆水盆にかえらず

本当は分数だったものを一度小数にしてしまうと、その「心」「意味合い」が飛んでしまう。
いいかえると、誤差が入る。

0.33333  が指すものが、
気持ちは 1/3 なのかもしれないし
いえいえ  33333/10000 なのかもしれない。



ということはさておき、小数を分数に直す方法を考察

■10進法
 小数が10進法で表現してあるならば、
  その桁分10の累乗で桁あげすると分数になる
  1.4142 = 14142/100000

 元の小数に対しては誤差なし
  約分してほしいというなら約分すればよい

■2進法
 プログラムの中のデータは2進法でなりたってることが多い。
 Cのfloat とか double も 中身は2進法

 上の10進法の方法を2進法でやればよいので
 1.0101 = 10101/10000   (ただし、数字は2進数表記)

 これも、元の小数に対しては誤差なし

 分子の一番下のケタの数字が1ならもうそれ以上は約分できない
  下の桁の0を分子分母で同時に削ることで約分できる
 100100/100000 = 1001/1000


■連分数
 最近聞きかじったものに「連分数」がある
 正則連分数の作り方はwikipediaに書いてあった。
 
 http://ja.wikipedia.org/wiki/%E9%80%A3%E5%88%86%E6%95%B0
 連分数の計算方法

 「連分数の方法で近似を高めていって、希望の誤差以下になったらそれを採用する」
 という方法が考えられる。

 これだと、0.33333 ->  1/3 に直す系も構築できる。

 ただし、元の小数に対しては誤差があることになる。



  • コメント (1)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/55862

コメント

2進数では1/5も循環小数になる。
1/101=0.001100110011・・・

  • Posted by いわいまさか
  • at 2013/03/17 06:01:24