浮動小数点数と数値計算

7月 15th, 2008 admin Posted in Ruby, アルゴリズムとデータ構造 | 1 Comment »

あいかわらず「アルゴリズムとデータ構造シリーズ」です。今回は第8章「浮動小数点数と数値計算」です。

浮動小数点数

float型やdouble型の数値はコンピュータの内部では
符号と指数(n)と基数(a)で表現されている。
たとえば12.8なら
基数=0.8
指数=4

0.8*2^4
という具合です。なのでその表現の都合で、あまりにも大きかったり小さかったりする数字は正確には表せないということがあるというお話

数値計算

簡単な数値計算の例として5次方程式を解くというもののコードを書きました。
バイナリサーチを用いて、答えのある範囲をだんだんと絞っていくものです。

RUBY:
  1. #func
  2.  
  3. def func(x)
  4.     x = (x * x * x * x * x) - (10.0 * x * x * x * x) + (25.0 * x * x * x) + ( 40.0 * x * x) + ( 200.0 * x) - 500.0
  5.     return x
  6. end
  7.  
  8.  
  9. def binary_search
  10.   epsilon = 0.00001
  11.   left = 1.0
  12.   right = 3.0
  13.  
  14.   while((right-left).abs> epsilon && func(left).abs> epsilon)
  15.     mid = (left+right)/2.0
  16.     if(func(left)*func(mid)>=0.0)
  17.       left=mid
  18.     else
  19.       right=mid
  20.     end
  21.   end
  22.  
  23.   return left
  24. end
  25.  
  26. d = binary_search
  27. p d
  28. printf("answer is %1f. and func(x) is %1f \n",d,func(d))

まとめ

コンピューターなのに不正確な答えを出すと言うのがなんだか面白いですね。

※このシリーズは私がRubyでアルゴリズムとデータ構造を基礎から学ぶ記録です。全体の目次はこちらへ。

One Response to “浮動小数点数と数値計算”

  1. [...] 浮動小数点数と数値計算 [...]