2019年3月15日金曜日

円周率の分数近似

円周率の日の余震が続いている。3月14日,Googleは円周率の計算の世界記録を更新したことを発表したとの報道があった。31.4兆桁(31,415,926,535,897桁)までの計算を111.8日(start to end で121.1日)かけて計算したそうだ。このプロジェクトを主導したのは,筑波大学出身の技術者 Emma Haruka Iwao (岩尾・エマ・はるか)さん。今年の1月には終わっていたが,このよき日に発表された。つぎに記録に挑戦するグループは,314兆桁を越えないといけないのか。

さて,だいぶ昔(2011.6.30)のWolfram Blogで,Jon McLooneが,"All Rational Approximations of Pi Are Useless"という記事を書いている。

どういうことかというと・・・円周率のよくある近似値22/7を例にとってみる。22/7 = 3.1426... は小数点以下2桁まで正しいので,小数点も含め,3 .  1 4 の4文字が表現されたことになる。このために必要な数は 2 2 / 7 の4文字である。これじゃ文字数が節約できていない。どちらを覚えてもいっしょじゃないか,ということらしい。

もっとやってみると,355/113 = 3.141592... これは小数点以下6桁すなわち8文字まで正しい円周率に対応している。一方,355/113は7文字,さきほどよりちょっとだけましだ。

McLooneの記事にあるMathematicaの関数を用いて,小数点以下50桁のπとその分数表示を求めると,

\begin{equation}
\frac{26151465932107044561886949}{8324270144388272579650158} = \\
 \\
3.14159265358979323846264338327950288419716939937510...
\end{equation}
ということで共に52文字必要としている。でこぼこはあるが,おおむねこの比が1で推移することから,分数表示意味ないじゃんということになったようだ。

必要なMathematica関数は以下のようになっている。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
In[1]:= characterCount[expr_] := StringLength[ 
  StringReplace[ToString[Unevaluated[expr], InputForm], 
   " " -> ""]]; SetAttribute[characterCount, HoldAll];

In[2]:= matchingCharacters[expr_, target_] := 

 Ceiling[-Log10[Abs[expr - target]]] + 1

In[3]:= $MaxExtraPrecision = Infinity;

In[4]:= candidates = Table[Rationalize[Pi, 10^(-n)], {n, 1001}];

In[5]:= a = Table[candidates[[k]], {k, 1, 10}]

Out[5]= {22/7, 22/7, 201/64, 333/106, 355/113, 355/113, 
75948/24175, 100798/32085, 103993/33102, 312689/99532}

In[6]:= b = 
 Table[characterCount[candidates[[k]]], {k, 1, 1001, 50}]

Out[6]= {4, 54, 103, 154, 203, 253, 303, 353, 404, 455, 504,
 553, 603, 652, 704, 753, 803, 853, 904, 953, 1003}

In[7]:= c = 
 Table[matchingCharacters[candidates[[k]], Pi], {k, 1, 1001, 50}]

Out[7]= {4, 53, 103, 153, 204, 253, 303, 353, 404, 453, 503, 
553, 604, 653, 704, 753, 803, 853, 903, 953, 1003}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



0 件のコメント: