fortran66のブログ

fortran について書きます。

2012-05-01から1ヶ月間の記事一覧

IEEE 丸めモードで区間演算の代用

数値的に不安定な古典的な例として有名なヒルベルト行列の逆行列計算を、丸めモードを変えて計算してみます。 IEEE7754 の丸めモードの切り捨てと切り上げが、区間演算の下限と上限のようなものとして代用できるというアイデアを試してみます。 近接値への丸…

NAG の Fortran 検定

日本 NAG のサイトでやっている Fortran 検定(http://www.nag-j.co.jp/fortran/exam/index.html)をやってみました。文字列がらみの問題を軒並み間違ってしまいました。色々勘違いしている。ヤヴァイwww 文字変数は読み込み時は左詰め、書き出し時は右詰めw …

sine and cosine curves

昔よく見た文字グラフです。特に意味なしw Fortran2008 では、万能 G 型の Format がさらに拡張されて g0 によってあらゆる型を、よきに計らってくれます。また繰り返し指定子に * を使うことで無限反復となります。 実行結果 ソース・コード program test …

Introduction to Modern Fortran

ここの講義ノートが重箱の隅をつついていて結構面白いです。 http://people.pwf.cam.ac.uk/nmm1/Fortran/文字配列のメモリー上での置かれ方なんて考えたことがありませんでしたが、文字長が余分な配列の RANK として最内に加わった感じになっているそうです…

Newton法

少し改良。 実行結果 ソース・プログラム module m_sub implicit none abstract interface pure elemental real function t_f(a, x) real, intent(in) :: a, x end function t_f end interface contains recursive function xiter(f, a, xlist) result(res) …

Newton 法

最近関数プログラミングというのが流行っているわけですが、FORTRAN の父 John Backus は、関数プログラミングに対しても先駆者となっています。 昔 von Neumann モデルの限界がどうのこうの巷で騒がれたころに、Bakus のチューリング賞受賞講演 Can Program…

FizzBuss Fortran

文字型変数と他の型の変数の変換には内部ファイルへの READ/WRITE を用います。内部ファイルへの I/O があった場合、pure 性が保たれるのか気になったので試してみました。結論からいうと pure でした。 内部ファイルの I/O は型変換の代入に近いので、もっ…

eight queens

昔、PASCALの再帰を使った例題でよく出ていた eight queens 問題を解いてみます。前回の整数並べ替えの列挙を変形して利用します。配列の i 番目の要素が i 列目での queen の存在する行を指していると解釈します。 すでに飛車道を消した形になっているので…

順番付並べ替えの列挙

1からnまでの整数の順番付並べ替えを、再帰を使って列挙します。 実行結果 ソース・プログラム [list1, list2(i)], pack(list2, list2 /= list2(i)) この行では、list2 から要素を一個取り出して消して、list1 に加えています。配列をリストとして用いてい…

Napier's constant または Euler's Number

Fortran2008 では、iso_fortran_env という intrinsic module が導入されています。その module には、単精度や倍精度実数の kind が定義されています。 実行結果 ソース・プログラム program Napier use, intrinsic :: iso_fortran_env implicit none integ…

move_alloc を用いた整数の分割

昨日のバージョンでは、整数の分割は画面出力されるだけで、データとして値を返していませんでした。これを配列の配列として返すことを考えます。整数配列を要素として持つ構造体を返すことにします。 返り値となる割り付け配列の大きさを増加させていくため…

整数の分割

以前整数の分割数 p(n) を漸化式によって求めましたが、今回は分割そのものを求めることにします。 再帰を使った導出法は、富田氏による 『Fortran90プログラミング』例題8.10を参考としました。以下のプログラムでは、配列生成子 [ ] を用いて、サブルーチ…

OOP 的な用法で粒子の散乱

計算は手抜きのオイラー法で。話を散乱対を含む二次元面内に限定します。 実行結果 中央付近の四角い枠の中心に固定された正の点電荷があるとき、左側から縦の位置を乱数で決めた、右に水平に同じ速度を持つ荷電粒子を同時に発射したときの散乱のようすです…

Intel Fortran 組み込み関数の検定

大体において、組み込み関数の乱数は腐っているもので、真面目な計算に使うと怖い人達に叱られてしまいます。Intel Visual Fortran コンパイラー XE 12.1.4 で軽く検証してみます。 Fortran90 で導入されたサブルーチン RANDOM_NUMBER(x) は、elemental なサ…

FORTRAN77での実引数の扱い

FORTRAN77 での再帰を使ったプログラムで気になるは、引数が参照渡しになっていることです。局所変数は、みな AUTOMATIC 変数として呼び出しごとに確保されるからよいわけですが、引数が参照渡しである場合、呼び出しの深さに関わらず実引数の内容が書き換え…

77 での再帰 QuickSort を昔の処理系で

MS-FORTRAN Ver.5.1 オプション指定に Automatic 変数が見当たりませんが、とりあえず動きます。症状からするとコンパイラの default が 77 規格通りに Automatic になっている模様。マニュアルを見れば調べられますが、段ボールの奥底に眠っているので略。 …

FORTRAN77で再帰を使ってQUICK SORT

たまたま面白いサイトに出くわしました。本来再帰が許されていない FORTRAN77 で、シンタックスエラーを出さず、違法と合法のスレスレで再帰を実現する方法を発見した方がおられました。 http://www.esm.psu.edu/~ajm138/fortranexamples.html自分自身を関数…

Intel Visual Fortran の update が出たようです。

いつもメールで通知が来る少し前に上がっているような気がします。今回は主に bug fix で、新しい機能などは入らなかったようです。updateも10まで来たので、そろそろヴァージョン番号が上がって Fortran2003 完全対応になる日も近いでしょうかね?