ちょっと思うところあって"355/113"のような円周率に非常に近い値を表せる分数はないかと思って、それらを求めるワンライナーを考えてみた。
perl -MMath::Trig -le '($a=$_*pi)=~/\.(0{4}|9{4})/ && print int$a+$a=~/\.9/," / $_" for 1..100000'
for文で探索する範囲、正規表現での0または9の繰り返しの数で精度を調節。$aの値を出力してみるとわかりやすいかも。
結果表示に/\.9/へのマッチを使って繰り上げたりと、ちょっとトリッキーなことをしてるけど、これでちゃんと求められるっぽい。
$ perl -MMath::Trig -le '($a=$_*pi)=~/\.(0{4}|9{4})/ && print int$a+$a=~/\.9/," / $_" for 1..100000' 355 / 113 710 / 226 1065 / 339 103283 / 32876 103638 / 32989 103993 / 33102 104348 / 33215 104703 / 33328 105058 / 33441 207276 / 65978 207631 / 66091 207986 / 66204 208341 / 66317 208696 / 66430 209051 / 66543 209406 / 66656 311624 / 99193 311979 / 99306 312334 / 99419 312689 / 99532 313044 / 99645 313399 / 99758 313754 / 99871
実際の値はどうなの?というときはパイプでつないでevalしてみよう。
$ perl -MMath::Trig -le '($a=$_*pi)=~/\.(0{4}|9{4})/ && print int$a+$a=~/\.9/," / $_" for 1..100000' | perl -lpe '$_ .= " = ". eval' 355 / 113 = 3.14159292035398 710 / 226 = 3.14159292035398 1065 / 339 = 3.14159292035398 103283 / 32876 = 3.14159265117411 103638 / 32989 = 3.14159265209615 103993 / 33102 = 3.1415926530119 104348 / 33215 = 3.14159265392142 104703 / 33328 = 3.14159265482477 105058 / 33441 = 3.14159265572202 207276 / 65978 = 3.14159265209615 207631 / 66091 = 3.14159265255481 207986 / 66204 = 3.1415926530119 208341 / 66317 = 3.14159265346744 208696 / 66430 = 3.14159265392142 209051 / 66543 = 3.14159265437386 209406 / 66656 = 3.14159265482477 311624 / 99193 = 3.14159265270735 311979 / 99306 = 3.1415926530119 312334 / 99419 = 3.14159265331576 312689 / 99532 = 3.14159265361894 313044 / 99645 = 3.14159265392142 313399 / 99758 = 3.14159265422322 313754 / 99871 = 3.14159265452434