浮動小数点数と数値計算
あいかわらず「アルゴリズムとデータ構造シリーズ」です。今回は第8章「浮動小数点数と数値計算」です。
浮動小数点数
float型やdouble型の数値はコンピュータの内部では
符号と指数(n)と基数(a)で表現されている。
たとえば12.8なら
基数=0.8
指数=4
で
0.8*2^4
という具合です。なのでその表現の都合で、あまりにも大きかったり小さかったりする数字は正確には表せないということがあるというお話
数値計算
簡単な数値計算の例として5次方程式を解くというもののコードを書きました。
バイナリサーチを用いて、答えのある範囲をだんだんと絞っていくものです。
-
#func
-
-
def func(x)
-
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
-
return x
-
end
-
-
-
def binary_search
-
epsilon = 0.00001
-
left = 1.0
-
right = 3.0
-
-
while((right-left).abs> epsilon && func(left).abs> epsilon)
-
mid = (left+right)/2.0
-
if(func(left)*func(mid)>=0.0)
-
left=mid
-
else
-
right=mid
-
end
-
end
-
-
return left
-
end
-
-
d = binary_search
-
p d
-
printf("answer is %1f. and func(x) is %1f \n",d,func(d))
まとめ
コンピューターなのに不正確な答えを出すと言うのがなんだか面白いですね。
※このシリーズは私がRubyでアルゴリズムとデータ構造を基礎から学ぶ記録です。全体の目次はこちらへ。




