labunix's blog

labunixのラボUnix

clispでtan(e)とネイピア数の計算(1000桁)

Google先生にあっさり答えを出されるのも。。。

$ w3m -dump 'https://www.google.co.jp/search?q=tan(e)&btnG='`echo "検索" | \
  nkf -wMQ | sed s/"="/"%"/g` | \
  grep 'tan(e) =' | sed s/".*tan"/"tan"/
tan(e) = -0.450549534

■ネイピア数はclispの組み込み関数には無かったのか。

 参考:"初めての人のためのLISP"欄外格闘編
 http://www.asahi-net.or.jp/~ea7k-smmr/lisp.htm

コードはそのまま

$ echo '(defun my-fact (n)
    (cond
     *1
    (loop for i from 2 to 17 do
         (setq k (my-fact i))
         (setq bu (+ (* (/ k s) bu) 1.0d0))
         (setq s k))
    (/ bu k)))
(my-e)' | clisp -q | tail -1
2.718281828459045d0

■tan(e)をちょこっと変更

$ echo '-0.';echo '(defun my-fact (n)
    (cond
     *2
    (loop for i from 2 to 17 do
         (setq k (my-fact i))
         (setq bu (+ (* (/ k s) bu) 1.0d0))
         (setq s k))
    (/ bu k)))
(tan (my-e))' | sed s/"17"/"1050"/ | sed s/"d0"/"L0"/g | \
  sed s/'(defun my-fact'/'(setf (EXT:LONG-FLOAT-DIGITS) 10000)'"\n&"/ | \
  clisp -q | \
  awk -F\. '{print $2}' | tail -1 | cut -c -1009 | \
  sed s/"."/"&\n"/g | \
  awk '{if (NR % 50 == 0) print $1 ":"; \
   else if (NR % 10 == 0) print $1 "L0"; \
   else print $1}' | \
  xargs echo -n | \
  sed s/" "//g | sed s/":"/"\n"/g | sed s/"L0"/" "/g | \
  sed s/"L 0"//;echo ""
-0.
4505495340 6980749571 0634177701 2792944395 7091173203
6710012335 6116323009 0199510257 2842681708 7024670439
8432546310 2486897290 6873322564 1503335590 5403697882
2781609200 7876323780 8589704795 0268949178 9361704956
7837369707 5000220741 8833962280 1272947756 8179142596
3435070579 2211844599 6524473139 4515916222 8853235150
1455301540 8651083426 6909164801 0043198368 1618347063
8112335505 3577318972 7920443304 0339303476 0602425256
6302070282 4901056717 9761105788 3211426198 9807942901
3618484458 6738472387 2175944666 4375154577 4861531879
4303138813 8196497236 7481679660 6818985180 5177847858
9581510404 1141686640 5153911171 8559011801 0550875054
1505705848 4461162857 0056619480 5465980958 2569748654
5988278183 1530506924 2571914757 6832206949 8673633454
8170040469 5320434513 9291247690 0810581415 9542724124
1477841899 3587583128 8897185947 9030723660 3008172692
9439758145 9075497804 9270033609 1741178262 5982180989
6377630312 2951627619 0772428162 9370977288 9017340092
0634881885 8305908575 6863061411 0906013553 6470183155
3700268940 4163598212 9315639735 1862291589 1820916793
350819354


■ついでにネイピア数

$ echo '2.';echo '(defun my-fact (n)
    (cond
     *3
    (loop for i from 2 to 17 do
         (setq k (my-fact i))
         (setq bu (+ (* (/ k s) bu) 1.0d0))
         (setq s k))
    (/ bu k)))
(tan (my-e))' | sed s/"17"/"1050"/ | sed s/"d0"/"L0"/g | \
  sed s/'(tan (my-e))'/'(my-e)'/ | \
  sed s/'(defun my-fact'/'(setf (EXT:LONG-FLOAT-DIGITS) 10000)'"\n&"/ | \
  clisp -q | awk -F\. '{print $2}' | tail -1 | cut -c -1009 | \
  sed s/"."/"&\n"/g | \
  awk '{if (NR % 50 == 0) print $1 ":"; \
   else if (NR % 10 == 0) print $1 "L0"; \
   else print $1}' | \
  xargs echo -n | \
  sed s/" "//g | sed s/":"/"\n"/g | sed s/"L0"/" "/g | \
  sed s/"L 0"//;echo ""
2.
7182818284 5904523536 0287471352 6624977572 4709369995
9574966967 6277240766 3035354759 4571382178 5251664274
2746639193 2003059921 8174135966 2904357290 0334295260
5956307381 3232862794 3490763233 8298807531 9525101901
1573834187 9307021540 8914993488 4167509244 7614606680
8226480016 8477411853 7423454424 3710753907 7744992069
5517027618 3860626133 1384583000 7520449338 2656029760
6737113200 7093287091 2744374704 7230696977 2093101416
9283681902 5515108657 4637721112 5238978442 5056953696
7707854499 6996794686 4454905987 9316368892 3009879312
7736178215 4249992295 7635148220 8269895193 6680331825
2886939849 6465105820 9392398294 8879332036 2509443117
3012381970 6841614039 7019837679 3206832823 7646480429
5311802328 7825098194 5581530175 6717361332 0698112509
9618188159 3041690351 5988885193 4580727386 6738589422
8792284998 9208680582 5749279610 4841984443 6346324496
8487560233 6248270419 7862320900 2160990235 3043699418
4914631409 3431738143 6405462531 5209618369 0888707016
7683964243 7814059271 4563549061 3031072085 1038375051
0115747704 1718986106 8739696552 1267154688 9570350354
021234078


■微妙に統一感が無くて困るのだけど。。。

 以下との一致は「499」桁。

 ネイピア数1000桁(programming, python)

$ w3m -dump "http://d.hatena.ne.jp/yatt/20091021/1256109215" | \
  grep "1 |\|     4" | sed s/"^     4"/"|&"/g | \
  awk -F'|' '{print $2}' | sed s/"^ *"//g | \
  sed s/^2// | xargs echo -n | sed s/" "//g | \
  sed s/"."/"&\n"/g | \
  awk '{if (NR % 50 == 0) print $1 ":"; \
   else if (NR % 10 == 0) print $1 "L0"; \
   else print $1}' | \
  xargs echo -n | \
  sed s/" "//g | sed s/":"/"\n"/g | sed s/"L0"/" "/g | \
  sed s/"L 0"//;echo ""
7182818284 5904523536 0287471352 6624977572 4709369995
9574966967 6277240766 3035354759 4571382178 5251664274
2746639193 2003059921 8174135966 2904357290 0334295260
5956307381 3232862794 3490763233 8298807531 9525101901
1573834187 9307021540 8914993488 4167509244 7614606680
8226480016 8477411853 7423454424 3710753907 7744992069
5517027618 3860626133 1384583000 7520449338 2656029760
6737113200 7093287091 2744374704 7230696977 2093101416
9283681902 5515108657 4637721112 5238978442 5056953696
7707854499 6996794686 4454905987 9316368892 3009879317
7361782154 2499922957 6351482208 2698951936 6803318252
8869398496 4651058209 3923982948 8793320362 5094431173
0123819706 8416140397 0198376793 2068328237 6464804295
3118023287 8250981945 5815301756 7173613320 6981125099
6181881593 0416903515 9888851934 5807273866 7385894287
9228499892 0868058257 4927961048 4198444363 4632449684
8756023362 4827041978 6232090021 6099023530 4369941849
1463140934 3173814364 0546253152 0961836908 8870701676
8396424378 1405927145 6354906130 3107208510 3837505101
1574770417 1898610687 3969655212 6715468895 7035035402
1234085

■このサイトとは1000桁分一致。
 参考:ネイピア数の計算(0)-はじめに
 http://d.hatena.ne.jp/k87p561/20080520/1211297217
$ w3m -dump "http://d.hatena.ne.jp/k87p561/20080520/1211297217" | \
  grep ^[0-9] | grep -v '-'
7182818284 5904523536 0287471352 6624977572 4709369995
9574966967 6277240766 3035354759 4571382178 5251664274
2746639193 2003059921 8174135966 2904357290 0334295260
5956307381 3232862794 3490763233 8298807531 9525101901
1573834187 9307021540 8914993488 4167509244 7614606680
8226480016 8477411853 7423454424 3710753907 7744992069
5517027618 3860626133 1384583000 7520449338 2656029760
6737113200 7093287091 2744374704 7230696977 2093101416
9283681902 5515108657 4637721112 5238978442 5056953696
7707854499 6996794686 4454905987 9316368892 3009879312
7736178215 4249992295 7635148220 8269895193 6680331825
2886939849 6465105820 9392398294 8879332036 2509443117
3012381970 6841614039 7019837679 3206832823 7646480429
5311802328 7825098194 5581530175 6717361332 0698112509
9618188159 3041690351 5988885193 4580727386 6738589422
8792284998 9208680582 5749279610 4841984443 6346324496
8487560233 6248270419 7862320900 2160990235 3043699418
4914631409 3431738143 6405462531 5209618369 0888707016
7683964243 7814059271 4563549061 3031072085 1038375051
0115747704 1718986106 8739696552 1267154688 9570350354

■UBASIC(?)とも一致

 e の 1000 桁計算 (抄録と補遺)
 http://japla.sakura.ne.jp/workshop/symposium/2008/yamashita_dec2008.pdf