fortran66のブログ

fortran について書きます。

2010-02-01から1ヶ月間の記事一覧

INT(NaN), INT(+inf), INT(-inf) および部分配列ははみ出しおk?

IEEE例外の数に対するINT()の定義がよくわかりません。文献等で見た記憶がありません。後でISOの規格を調べてみたいですが、面倒くさくて億劫だw INTEGERのOut of rangeは、負の絶対値最大数になっているようですが、Intelの独自実装なのでしょうか、ISOの…

しつこくShell sort

Win32で走らせると、4割がたスピードアップします。Quick sortの場合はx64とWin32で速さは変わらないのですが・・ ■実行結果 Win32では10**9個のデータを確保できませんでした。 x64の場合の結果 ■ソースプログラム bubble sortの代わりにinsertion sortを使…

Shell sortでTokudaのgap increment sequenceを使うとお得だw

この論文によると、Knuthのgap式よりも性能の良いものがいくつか提案されているようです。その中のTokudaの式を使うことにします。 ■実行結果 確かにKnuthのものより計算量が少なくなっていて、Quick sortと似たような要素数依存性(O(NlogN))を見せています…

Quick sortがShell sortに負けているので..

要素数10**8程度ではShell sortも健闘してQuick sortと計算時間が変わりません。しかし、今のプログラムではQuick sortは余計なメモリーを食いすぎてこれ以上の要素数を計算できません。ここではQuick sortの小手先改良を行います。先日、要素数が少なくなっ…

<del datetime="2010-02-24T23:43:13+09:00">Shell sort実行時間がO(N^2)で謎だった件</del>Shell sort かわいいよ Shell sort!の巻

動的に記憶領域を確保できなかったFORTRAN77時代に重宝していたShell Sortのプログラムを書いてみました。ギャップのとり方として、Knuthの数列[tex:\{g_{n+1}=3*g_n+1|2*g_ha102549)。しかし、実行時間をデータ数の関数としてみると大体O(N^2)に比例して…

Quick sort + Bubble sort

Quick sortは、要素数が少ないときはかえって遅いので、要素数が減ったところでBubble sortのような素朴な方法に切り替えたほうが効率がよくなります。ここではBubble sortそのものではないのですが(しいて言えば沈殿sort?)、同等なO(N^2)のSORTを要素数50…

IBM 7094 Emulator でFORTRAN II Compilerを動かして1958年のプログラムを走らせる。

Computer History Museumのサイトに、1958年に書かれたFORTRAN IIとおぼしきプログラムと実行結果があります。5*5のHilbert行列の逆行列を求めるものです(Matrix Inversion Order 5)。先日は、Intel Visual Fortran Ver.11.1で実行してみましたが、今回…

POINTERではなくALLOCATABLEで

ALLOCATABLEでやると、記憶領域の開放を自動でやってくれるのでやや楽だと思います。必要なコンパイラ・オプションは /assume:realloc_lhs /heap-arrays100000 です。Intel掲示板によると、来週早々にもIntelFortranの新しいupdateが出るようです。 ■ソース…

Quick Sort

Quick Sortプログラムをポインタを返す形式に書き直してみました。手動で割付しているので、開放忘れに注意が必要です。多分大丈夫だと思いますが。ヒープ領域に動的配列を割り付けることで、大きな配列にも適用できます。 ■実行結果 要素1個から10**8(1…

素数の個数の近似関数

Riemannによる素数の個数の式。 ここでLi(x)はGaussによる素数の個数の近似式です。(でも積分の下限が2なのか0なのかよく分からんw ただ計算結果からは、どちらでも大差無し)またμ(k)はメビウス関数です。 実行結果 ソースプログラム あまりまじめに考…

積分のRichardson extrapolation

『Extrapolateせよ』と言われると、ヒューゴー・ガーンズバックを思い出してしまう駄目刷り込み。今日も昨晩に続き、積分のRichardson補外(もしくは外挿)をば。ところでSFといえば映画『涼宮ハルヒの消失』を見てきました。そろそろ劇場も空いてる頃かなと…

GaussのLi(x)関数

Nまでの素数の個数の評価式として、ルジャンドルのやGaussのなどがあります。ここではガウスのLi(x)関数を数値積分で求めてみます。定義式のままでは積分範囲が広すぎるので、の変数変換を行い、さらに部分積分をしてみます。 これがベストなのか分かりませ…

Hilbert matrix 1958

[Fortran66] 1958年のプログラムがほとんど無修正で動く件 計算機歴史博物館のサイトにFortran関連の古文書が置かれているのですが、その中に1958年にFORTRANで書かれた、5*5のHilbert行列の逆行列を掃き出し法で求めるプログラムがありました。このプロ…

Obsolecent features

例外処理には便利なんですが、時代が存在を許さないw 実行結果 ソースコード MODULE m_mod IMPLICIT NONE CONTAINS SUBROUTINE alt(i, *, *) INTEGER, INTENT(IN) :: i SELECT CASE(i) CASE(1) RETURN 1 CASE(2) RETURN 2 CASE DEFAULT RETURN END SELECT E…

エラトステネスの篩

確かに抽象度の高い新しい言語使用を使うとソースコードは簡潔になるけれど、見えないところで動的にメモリーを使用するので、スタックがあふれたり、最適化が効かなかったりで、DO LOOPのさわやかさには及びません。 出発ベクトルを演算子で何段も処理して…

武内義雄

武内義雄の『支那思想史』/『中国思想史』は非常に明晰でかつ面白いです。よく文系書籍にみられるような、事実と意見と推測と思い入れがくそみそごっちゃりになっているものとは違って、事実と推論と根拠と意見がきっちり分かれて簡潔に記述されていて、読…

オイラーの素数生成式

オイラーの素数生成式とその類似に基づいて素数を生成し、それが本当に素数かチェックします。素数判定は、素数が小さいので素朴に余りを見てゆくことにします。オイラーの素数生成式を初めて知った時、随分と妙なものがあるものだと思いましたが、その仲間…

EXP(pi SQRT( d ) ) が整数!

EXP(π√163)が整数にとても近くなるという事について、ちょっとだけ詳しく本に載っていたので試し計算。 実行結果 ソースコード PROGRAM test IMPLICIT NONE INTEGER, PARAMETER :: kq = SELECTED_REAL_KIND(25) REAL(kq), PARAMETER :: pi = 4.0_kq * ATAN(1…

単位行列を一行で生成

ついでに動的にフォーマット生成もする。 INTRINSIC :: RESHAPE が入ったのは、ファイル名を RESHAPE.F90 にしたため object 名がかぶってしまい必要になりました。本来的には不要。新版 fortran66.hatenablog.com 出力結果 ソースコード PROGRAM test INTEG…

QuickSort

Intelのコンパイラでの文法厳密チェックオプションで引っかかるので調べたところ、『Fortran95/2003 Explained』6-11(p.116)に、確かにそのように書いてありました。しかし、根拠はよく分かりません。 これを満たすように少し書き換えてみました。『Fortran …