- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/05/30
- メディア: 単行本
- 購入: 8人 クリック: 310回
- この商品を含むブログ (57件) を見る
昨日から読んでいる。P.164に、
cos が扱える計算機を使えば、
cos20° = 0.93969262078590838405410927732473…
と計算できる。
と書いてある。ふつうこんなに桁数求まるのかにゃあ、と思ってWindows 7の電卓を叩いてみたら上の通りになった。128ビットで計算しているのかにゃ?
ところで、Pythonでは標準モジュールのdecimalを使うと簡単にこれ以上の高精度でcos20°を求めることができます。
まず、精度を設定します。
getcontext().prec = 52
これでDecimalオブジェクトは52桁の精度で計算されることになります。Decimalオブジェクトは、
Decimal(1)
などとして生成します。
あとは、cos20°は
8x^3 - 6x - 1 = 0
の0と1の間の根なので、最も簡単な2分法で求めます。
from decimal import * N = 50 getcontext().prec = N + 2 eps = 1 / Decimal(10 ** (N + 1)) def bisection(f, first, last): mid = (first + last) / 2 if last - first < eps: return mid elif f(mid) > 0: return bisection(f, first, mid) else: return bisection(f, mid, last) f = lambda x: (8 * x * x - 6) * x - 1 format = "%%.%df" % N print format % bisection(f, Decimal(0), Decimal(1))
このような結果が得られました。
0.93969262078590842790504211734514683485031127929688
9.4. decimal - 10進固定及び浮動小数点数の算術演算 - Python 2.7ja1 documentation