for WPF developers
Home Profile Tips 全記事一覧

円周率の小数点以下に現れる数値

(2018/03/22 8:07:53 created.)

ふと円周率に思いをはせることがあり(かなり頭おかC)、
小数点以下に現れる 0 から 9 の数の出現率は
どのような分布になっているのだろう、と気になってしまった。

気になってしまったものはしょうがない。
というわけで C# コードで簡単に調べてみたよ。

Program.cs
  1. namespace PiTest
  2. {
  3.     using System;
  4.     using System.Linq;
  5.     using System.Text;
  6.  
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Console.WriteLine("最大値 = 9、最小値 = 0 のとき、");
  12.             Console.WriteLine("おおよそ、一様分布の");
  13.             Console.WriteLine("平均値は {(最大値) - (最小値)} / 2 = (9 - 0) / 2 = 4.50");
  14.             Console.WriteLine("標準偏差は {(最大値) - (最小値)} / 2√3 =  (9 - 0) / 2√3 = " + (9 / 2 / Math.Sqrt(3.0)).ToString("#0.000"));
  15.             Console.WriteLine("であることが知られている。");
  16.             Console.WriteLine();
  17.  
  18.             var nums = ASCIIEncoding.ASCII.GetBytes(Constants.PiString).Select(x => x - 0x30).ToArray();
  19.             Console.WriteLine("円周率 " + nums.Length.ToString("N0"+" 桁に出現する数の");
  20.  
  21.             var ave = nums.Average();
  22.             var stdev = Math.Sqrt(((double)nums.Select(x => x * x).Sum() / nums.Length - ave * ave));
  23.             Console.WriteLine("平均値は " + ave.ToString("#0.00"));
  24.             Console.WriteLine("標準偏差は = " + stdev.ToString("#0.000"));
  25.             Console.WriteLine();
  26.  
  27.             Console.WriteLine("一様分布より若干分布が広い");
  28.  
  29.             Console.ReadKey();
  30.         }
  31.     }
  32. }

Constants.PiString は static な string 型で、
円周率の小数点以下の数値を文字列として 1,000,000 桁分保持しています。
というのも、web 上で円周率を調べたらこの桁であれば
テキストデータで掲載されていたので、
それをそのまま流用させていただいたというだけです。

実行結果がこちら。

標準偏差が一様分布のものよりもやや大きめ、という結果でした。
円周率は調べ出すと人生終わるらしいので程々にしておきます。