1/9801が面白い、というのを読んだのだが、確かにちょっと楽しい。 9801 = 34 ⋅ 112 = 992 なのだが、それはともかく、

$ bc scale=220 1/9801 .0001020304050607080910111213141516171819202122232425262728293031323\ 33435363738394041424344454647484950515253545556575859606162636465666\ 76869707172737475767778798081828384858687888990919293949596979900010\ 20304050607080910

というように、2桁ごとに見ていくと、1から順に数えてゆくような、規則的なパタンが現れている。97の後、98が抜けているのが残念。 ちなみに、「Gaucheなら有理数を扱えるはず」と思って、「98も抜けないような形の分数ってどんなのかな?」と計算させてみると、以下のとおり。な、長い……。でも分母が面白い。 上記の値から逆に1/9801を得ることもできた。

; num-of-digits桁で循環していて、その循環パタンはnum-patternであるような ; 分数 (ただし1未満) を求める。 ; なお、num-patternにleading zero(s)がある場合は、その0を省略した正整数で ; 表現するものとする。 ; たとえば2桁で循環していてそのパタンが34だとすると、その分数を10^2倍した ; 値からその分数自体を引くと、 ; 34.343434 ... - 0.343434 ... = 34 ; なので、34/(10^2-1)=34/99が、求める答えですね、という単純な話である。 (define (get-rational num-of-digits num-pattern) (/ num-pattern (- (expt 10 num-of-digits) 1))) (get-rational 200 10203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899) 103061015212836455566789206213754729212335579032854821039700133670136731048882870125600459239883788399246005612702888491073370167340170401082552903795634129273553822069279675646372922161107040201/1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 (get-rational 198 102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969799) 1/9801

Perlで以下のようにやって、100の所をもっと大きな数にして、出力結果から面白そうなのを目で見て選ぶ、ということも考えたが、浮動小数点数の精度の問題もあるし、目で見て選ぶ労力がつらいということが分かっただけだった。100で既につらいんだもん、1/9801を見つける前に挫折するよ。

for ($i=2; $i<=100; $i++) { $x = 1.0/$i; printf "1/%d = %2.50f\n", $i, $x; }

というわけで(?)、bcでゆるゆると遊んでみる。

scale=20 1/11 .09090909090909090909 1/9 .11111111111111111111 1/99 .01010101010101010101 1/999 .00100100100100100100 1/9999 .00010001000100010001

という感じで、綺麗である。で、

scale=100 1/(99*9) .0011223344556677890011223344556677890011223344556677890011223344556\ 677890011223344556677890011223344 1/999/99 .0000101111212222323333434444545555656666767777878888990000101111212\ 222323333434444545555656666767777 1/9999/999 .0000001001101111112112212222223223323333334334434444445445545555556\ 556656666667667767777778778878888 scale=350 1/999/999 .0000010020030040050060070080090100110120130140150160170180190200210\ 22023024025026027028029030031032033034035036037038039040041042043044\ 04504604704804905005105205305405505605705805906006106206306406506606\ 70680690700710720730740750760770780790800810820830840850860870880890\ 90091092093094095096097098099100101102103104105106107108109110111112\ 11311411511

となる。こういうのも、見ていてちょっと楽しい。 こうしてみると、bcで桁数指定できるのって便利だな。 ちなみに、~/.bash_profile

export BC_ENV_ARGS="${HOME}/.bc"

と書いておいて、~/.bc

scale=3

のように、自分がよく使う桁数の指定をしておくと、とても便利。 bash以外だとちょっと設定の仕方が違うだろうけれど。