裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

数値計算の落とし穴(非常に希なケース?)その3

2020年11月17日 | ブログラミング
16677181699666574 >= 3**x を満たす最大の整数 x を求めよ
Python の sympy は,綺麗な解を与える。

>>> from sympy import *
>>> var('a, n, x')
(a, n, x)
>>> a = Ge(n, 3**x)
>>> a
n >= 3**x


>>> solve(a.subs(n, 16677181699666574), x)
x <= log(16677181699666574)/log(3)

>>> solve(a.subs(n, 16677181699666574), x).evalf(30)
x <= 34.0000000000000002728995950932

>>> solve(a.subs(n, 16677181699666573), x).evalf(30)
x <= 34.0000000000000002183196760745

>>> solve(a.subs(n, 16677181699666572), x).evalf(30)
x <= 34.0000000000000001637397570559

>>> solve(a.subs(n, 16677181699666571), x).evalf(30)
x <= 34.0000000000000001091598380373

>>> solve(a.subs(n, 16677181699666570), x).evalf(30)
x <= 34.0000000000000000545799190186

>>> solve(a.subs(n, 16677181699666569), x).evalf(30) # ここが分かれ道
x <= 34.0

>>> solve(a.subs(n, 16677181699666568), x).evalf(30)
x <= 33.9999999999999999454200809814



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村