みなさん < こん??は でび@浅田彰の逃げて逃げて逃げまくれ、を実践中。です
以下、TSabcでの、ねこ丸さんの、古いテキスト類って結構大事だよ
っていうお話の流れで、やってみて、出てきたネタです。
河野真治著『入門Perl』(アスキー 1994/7)
http://www.amazon.co.jp/dp/4756102921を引っ張り出してきました。
# この本、最後のお題が9600bpsのモデムでパソ通のBBSへの
# ソケットを張る通信マクロ作成なんですよぉ。
# 良い風合いに骨董化している、という訳で引っ張り出してきました。
なお、ぶっちゃけ、「ひでーな、この本。教える内容の順番が
グチャグチャ。」が感想です。放り投げていたのもそれが理由の一つかも。
さて、5.8系でPerl最新版入れてみて、ヘノンアトラクタ(エノン写像)
の行列を1万行生成し、出力をExcelに貼り付けて散布図でプロット
してみました。
# -----------------------
$x = 0.2;
$y = 0.3;
for ($i=0;$i<10000;$i++){
printf("%1.3g\t%1.3g\n" ,$x,$y);
($x,$y) = (1.0+$y-1.4*$x*$x, 0.3*$x);
}
# -----------------------
う〜む。ちゃんと出た。
Active Perl v5.8.9 build 825 [288577]
0.2 0.3
1.24 0.06
-1.11 0.373
-0.341 -0.332
0.505 -0.102
0.54 0.152
0.743 0.162
0.39 0.223
1.01 0.117
-0.312 0.303
式そのものは簡単なので、ついでにExcelで同様の式を作成して
やってみました。
x y
0.2 0.3
=1+B2-1.4*A2^2 =0.3*A2
以下、オートフィル。
出てきた結果は以下の通り。
Excel 2007
x y
0.2 0.3
1.244 0.06
-1.107 0.3732
-0.341 -0.33196512
0.505 -0.102310591
0.540 0.151562331
0.743 0.162108168
0.390 0.222833095
1.010 0.11691104
-0.312 0.303065036
これ、よく見ると、数値行列の値が結構違いますね…。
Excelのxの3つ目の出力 -1.107 に注目すると、
小数点第3位の四捨五入とか、切り上げ/切り捨て
などの処理では他の値に影響が出てしまいそう。
つまり、Excel側で通常の操作では、対応不可能っぽい気が…。
いろいろ調べてみたら、浮動小数点の誤差ってことみたい
なんですが、その理解でOK? > おる
浮動小数点の誤差について、Excel側の出力を、Perlと同じ
結果に持ってゆくのはマクロ組むとかで切り抜けるとか、
結構めんどくさそう。
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml
つーか、Perlが採用している浮動小数点のデータ形式も
よくわからんし。
# 上のスクリプトの、3gは浮動小数点を有効桁3桁に四捨五入で
# 丸めろ、という指定ですよね?
しかし、こんなに違うと、衛星射出の軌跡計算とか医療分野とかで
Excelを使うのは危ないかも、って、ちと怖くなってきますな…。
# 昔、CPUにはコプロセッサあり/なしバージョンがありましたね。
# Intel386 SXの方が安いとか…。
でび http://davi.txt-nifty.com/1984/