2017-11

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

perlのabsとsortを用いた時のバグ

ガウシアンのデータを解析して、軌道の特徴を出そうとしているんだがうまく行かない。
どのようにしているかと言うと
Molecular Orbital Coefficientsの下のところに
     Molecular Orbital Coefficients
                          21        22        23        24        25
                           O         O         O         O         O
     EIGENVALUES --    -0.50277  -0.47643  -0.46804  -0.45391  -0.33819
   1 1   C  1S         -0.01553  -0.02705   0.00309  -0.01011  -0.07798
   2        2S          0.04462   0.06229  -0.02245   0.02073   0.15830
   3        2PX         0.00508  -0.00358  -0.07351  -0.01989   0.12867
   4        2PY         0.10840   0.12101  -0.08920   0.03922   0.32031
   5        2PZ         0.01216   0.00874   0.00227  -0.07443   0.25632
   6        3S          0.05779   0.05074   0.06068  -0.02901   0.24044
   7        3PX         0.03092   0.00075  -0.10201  -0.02403   0.16319
   8        3PY         0.09382   0.12275  -0.07003   0.02039   0.34777
   9        3PZ         0.04039   0.03806  -0.01593  -0.03642   0.22116
  10 2   H  1S          0.02671   0.05850  -0.02469   0.09223  -0.07185
  11        2S          0.03832   0.05619  -0.05950   0.09551  -0.04956
  12 3   H  1S          0.06928  -0.06800   0.04595  -0.03571  -0.04469
  13        2S         -0.12009  -0.01881   0.13713   0.40280   0.15609
  14 4   Cl 1S          0.00534   0.00028   0.00034   0.00096  -0.00267
  15        2S         -0.02096  -0.00558   0.00029  -0.00237   0.00293
  16        2PX        -0.17491  -0.00165   0.13123   0.10127   0.04874
  17        2PY        -0.04145   0.00756   0.05166   0.07323   0.10452
  18        2PZ        -0.04391  -0.21297   0.01018  -0.12956   0.08248
  19        3S          0.03099  -0.00614   0.00473   0.00811  -0.02886
  20        3PX         0.34075   0.00340  -0.25797  -0.20059  -0.09758
  21        3PY         0.08193  -0.01481  -0.10266  -0.14398  -0.20958
  22        3PZ         0.08603   0.41715  -0.02087   0.25460  -0.16359
  23        4S          0.05486   0.05071  -0.01514   0.00019   0.05074
  24        4PX         0.35988  -0.01565  -0.26347  -0.20672  -0.14613
  25        4PY         0.10073   0.00764  -0.11193  -0.15119  -0.21285
  26        4PZ         0.08654   0.44988  -0.01549   0.27950  -0.22033
  27 5   C  1S         -0.01110   0.01554   0.00349   0.02095   0.02727
  28        2S         -0.01504  -0.01832  -0.00803  -0.01096  -0.05637
  29        2PX         0.03896  -0.06008   0.00340  -0.01457  -0.05818
  30        2PY        -0.12401   0.00574   0.02491  -0.03781  -0.01956
  31        2PZ        -0.03171  -0.07749  -0.09491   0.14482  -0.00522
  32        3S          0.12199  -0.00508  -0.20397  -0.36526  -0.15093
  33        3PX         0.00344   0.02103  -0.11059  -0.11233   0.02047
  34        3PY        -0.05095  -0.04266   0.00485  -0.00323   0.04759
  35        3PZ        -0.02422  -0.05401  -0.02617   0.07335   0.02222
  36 6   Cl 1S         -0.00073  -0.00069  -0.00106  -0.00115   0.00146
  37        2S          0.00538   0.00458   0.00366   0.00546  -0.01195
  38        2PX         0.11423  -0.09519   0.14701   0.08478  -0.04621
  39        2PY        -0.12884   0.03975  -0.05374  -0.06777  -0.06910
  40        2PZ        -0.02862  -0.11242  -0.16908   0.15907  -0.00451
  41        3S          0.00008  -0.00065  -0.00696  -0.00512  -0.00214
  42        3PX        -0.22356   0.18772  -0.28992  -0.16712   0.09026
  43        3PY         0.25208  -0.07806   0.10672   0.13436   0.13475
  44        3PZ         0.05582   0.22011   0.33228  -0.31333   0.00855
  45        4S         -0.03369  -0.02345  -0.01180  -0.02294   0.07652
  46        4PX        -0.25939   0.19305  -0.31183  -0.18651   0.12583
  47        4PY         0.25819  -0.09665   0.10649   0.14092   0.18977
  48        4PZ         0.05973   0.24991   0.37182  -0.35757   0.01697
  49 7   H  1S         -0.02404  -0.05864  -0.07369   0.10575  -0.05051
  50        2S         -0.01439  -0.02092  -0.06974   0.09146  -0.07623
  51 8   H  1S         -0.09630   0.02475   0.01660  -0.06771  -0.04752
  52        2S         -0.09758   0.04725   0.01245  -0.08053  -0.04924

と言うデータがあるので、この絶対値が多い順に並びかえ、寄与の大きい軌道はそこかを特定しようとしてるのだが、
たとえば、21列ならば、4のClの4PX軌道の0.35988になるはずなのだが、
6のClの3Sの0.00008が選ばれてしまう。
いや、ありえないだろうと思って、えらい長い時間解析をしてたが、やっと理由がわかった。
abs(0.00008)の返り値が8e-05のような指数で何故か返って来るため、
sortで優先順位が高くなってしまうんだ。
何でこんな変な仕様にしてるのかなぁ。
結局、ただでさえデータ構造ややこしいのに、絶対値用のデータも一つつくって、
spritf("%.4d",abs($2));等と言った言う形で、小数点以下5位を潰してやった、整列用のデータを使うことで
うまく動くようになった。

でー、ゴルァメールしたいんだが、どこ宛にすりゃいいんだろうか、、、、。
やっぱ本家に英語で突激するしか無いのかな、、、、。
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://parathion.blog76.fc2.com/tb.php/27-ee8d411d
この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

プロフィール

パラジョン

Author:パラジョン
FC2ブログへようこそ!

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。