fortran66のブログ

fortran について書きます。

謎の Fortran 質問サイト

www.fortrancoding.com という名の謎の Fortran 専門の質問サイト

がありまして、紫色の背景に灰色の文字で、はなはだ見にくいです。

質疑応答が書かれていますが、stackoverflow とか、どこかからの転載なのか、よく分かりません。内容はやや高度なものが多い気がします。

Discussion about FORTRAN - www.fortrancoding.com

遠目に見ていきたいと思います。

www.youtube.com

Fortran Coding Sheet

リンク集

EXCEL2010 版

d.hatena.ne.jp

コクヨ フォートラン プログラム用紙

d.hatena.ne.jp

OCR用 コーディングシート

少し昔の物(コンピュータ関連)

text

My Father's Old Computer Manuals

                                                                                        X28-7327-5
IBM                   FORTRAN Coding Form                                          Printed in U.S.A.
|---------------------------------------------------------------------------------------------------|
| PROGRAM          |          | PUNCHING      | GRAPHIC  |  |  |  |  |  |  |  | PAGE  OF            |
|-----------------------------|               |-----------------------------------------------------|
| PROGRAMMER       | DATE     | INSTRUCTIONS  | PUNCH    |  |  |  |  |  |  |  | CARD ELECTRO NUMBER*|
|---------------------------------------------------------------------------------------------------|
|   STATEMENT |T|     FORTRAN STATEMENT                                            | IDENTIFICATION |
|    NUMBER   |C|                                                                  |   SEQUENCE     |
|---------------------------------------------------------------------------------------------------|
| 1 2  3 4  5 |6| 7 8 9 . . .                                          . . . 71 72 | 73 74 . . . 80 |
|---------------------------------------------------------------------------------------------------|
* A standard card form, IBM electro 888157, is available for punching statements from this form

「The new features of Fortran 2015」の最新版出る!

N2127 The new features of Fortran 2015 (Reid)

NAG のサイトの Fortran Standards のページに、John Reid 氏の 「N2127 The new features of Fortran 2015 (Reid) 」の最新改訂版がうpされました。Fortran 2015 が固まってきたことを受けての改定と思われます。


http://www.nag.co.uk/sc22wg5/index.html
直リン:http://isotc.iso.org/livelink/livelink?func=ll&objId=19044944&objAction=Open

The aim of this paper is to summarize the new features of the Fortran standard that
is expected to be published in 2018. It is known informally as Fortran 2015 because the
choice of features to include was chosen in 2015. We take as our starting point Fortran 2008
(ISO/IEC 2010).

Fortran 2015 は、本来 Minor Revison であるはずの Fortran 2008 が、co-array 導入による Major Revision 風味になったことを受けてか、この文書は結構な分量があります。

内容的には、

  1. C 言語との互換性の拡張
  2. Co-Array 機能の拡張
  3. IEEE754 の拡張である ISO/IEC/IEEE 60559:2011 への対応
  4. 欠陥の除去

の四つになっています。いずれも細々とした内容で量も多いです。46ページもあります。


ISO/IEC/IEEE 60559:2011

従来 denormal number と呼んでいた数が、今後 subnormal number と呼び名を変えるそうです。




サブがノーマルだなんて…
f:id:fortran66:20170706014005j:plain
f:id:fortran66:20170706014907p:plain


どっちかというと危脳丸…
f:id:fortran66:20170706013953j:plain 

浮動小数点数で結合則が成り立たない簡単な例

浮動小数点数では結合則が成り立ちません。すなわち

(a + b) + c /= a + (b + c)

です。

その簡単な例として、単精度実数の 2**24 付近で、数直線の刻み幅が 2 になる所で +1 計算をしてみます。

ソースプログラム

浮動小数点演算の評価を /fp:strict オプションで厳密にしておく必要があります。

    program Console3
      implicit none
      integer :: i
      real :: a, b, c
      i = 2**24  
      a = real(i)
      b = (a + 1.0) + 1.0 
      c =  a + (1.0 + 1.0)
      print '(a, f10.0) ', '   2**24                =', a
      print '(a, f10.0) ', '  (2**24 +  1.0) + 1.0  =', b
      print '(a, f10.0/)', '   2**24 + (1.0  + 1.0) =', c 
!      
      do i = -20, 20
        print '(2i10, f10.0, b33.32, ":", b2.2)', i, 2**24 + i, real(2**24 + i), real(2**24 + i), modulo(i, 4)   
      end do    
    end program Console3

実行結果

2**24 までは数直線が1刻みですが、ここから上は数直線は2刻みになるので、1 を 2 回足しても 2**24 = 16777216 以上には増えません。しかし先に 1 と 1 を足して 2 にしておくと、刻みを1個上がって 16777218 となります。

つまり、結合則が破れていることが分かります。


ところで、数直線が2刻みになったあとは、値は2個ごとに2飛びで増えてゆくのかと思いきや、1:3の割合でちんばに増えてゆきます。これは、見えないビットの0捨1入後にビット列として偶になるように丸める規則のためと思います。

   2**24                = 16777216.
  (2**24 +  1.0) + 1.0  = 16777216.
   2**24 + (1.0  + 1.0) = 16777218.

       -20  16777196 16777196. 01001011011111111111111111101100:00
       -19  16777197 16777197. 01001011011111111111111111101101:01
       -18  16777198 16777198. 01001011011111111111111111101110:10
       -17  16777199 16777199. 01001011011111111111111111101111:11
       -16  16777200 16777200. 01001011011111111111111111110000:00
       -15  16777201 16777201. 01001011011111111111111111110001:01
       -14  16777202 16777202. 01001011011111111111111111110010:10
       -13  16777203 16777203. 01001011011111111111111111110011:11
       -12  16777204 16777204. 01001011011111111111111111110100:00
       -11  16777205 16777205. 01001011011111111111111111110101:01
       -10  16777206 16777206. 01001011011111111111111111110110:10
        -9  16777207 16777207. 01001011011111111111111111110111:11
        -8  16777208 16777208. 01001011011111111111111111111000:00
        -7  16777209 16777209. 01001011011111111111111111111001:01
        -6  16777210 16777210. 01001011011111111111111111111010:10
        -5  16777211 16777211. 01001011011111111111111111111011:11
        -4  16777212 16777212. 01001011011111111111111111111100:00
        -3  16777213 16777213. 01001011011111111111111111111101:01
        -2  16777214 16777214. 01001011011111111111111111111110:10
        -1  16777215 16777215. 01001011011111111111111111111111:11
         0  16777216 16777216. 01001011100000000000000000000000:00
         1  16777217 16777216. 01001011100000000000000000000000:01
         2  16777218 16777218. 01001011100000000000000000000001:10
         3  16777219 16777220. 01001011100000000000000000000010:11
         4  16777220 16777220. 01001011100000000000000000000010:00
         5  16777221 16777220. 01001011100000000000000000000010:01
         6  16777222 16777222. 01001011100000000000000000000011:10
         7  16777223 16777224. 01001011100000000000000000000100:11
         8  16777224 16777224. 01001011100000000000000000000100:00
         9  16777225 16777224. 01001011100000000000000000000100:01
        10  16777226 16777226. 01001011100000000000000000000101:10
        11  16777227 16777228. 01001011100000000000000000000110:11
        12  16777228 16777228. 01001011100000000000000000000110:00
        13  16777229 16777228. 01001011100000000000000000000110:01
        14  16777230 16777230. 01001011100000000000000000000111:10
        15  16777231 16777232. 01001011100000000000000000001000:11
        16  16777232 16777232. 01001011100000000000000000001000:00
        17  16777233 16777232. 01001011100000000000000000001000:01
        18  16777234 16777234. 01001011100000000000000000001001:10
        19  16777235 16777236. 01001011100000000000000000001010:11
        20  16777236 16777236. 01001011100000000000000000001010:00
続行するには何かキーを押してください . . .

支那 Fortran サイト

今まで支那系サイトでは本の違法スキャンと割れソフトぐらいしか見たことがありませんでしたが、最近まともな情報の載ったサイトが出現し始めています。

中々、豊富な情報を持ったサイトです。
fcode.cn

スパコンに金を注ぎ込み始めたあたりから、検索で引っかかる Fortran がらみの本も多くなってきた気がします。(根拠主観w)Metcalf & Reid Stephen Chapman の本も F95/03 あたりまでは翻訳されており、日本より Fortran に対して熱心感があります。


かつて Intel が7割引きのダンピングで中国にスパコンを売ったりしていました。クリントン時代にはダンピングを理由に日本製コンピュータに300%の関税などを掛けていたことが思い出されます。


引用 intel visual fortran と MS visual studio の対応表
http://fcode.cn/uploadfile/2016/0110/20160110102923974.gif

Fortran Plaze で gfortran 用の win32/64「図形表示ライブラリ」公開

Fortran Plaze というサイトで、赤塚保雄氏が FORTRAN で書かれた windows 用のグラフィックライブラリを公開されています。

gfortran 用に書き直して装い新たに公開されたようです。汎用計算機用のグラフィックスルーチンの移植ということで、昔風の安定感ある感じになっています。

Fortran Plaza

LINK切れのメモ帳

再掲:Fortranのループ変数が I,J,K,L,M,N になった理由

fortran66.hatenablog.com

books.google.co.jp

f:id:fortran66:20170625031239p:plain
(Richard L. W.(ed.), History of Programming Languages p.70)

ついでに LOOP 0回 1回 問題の回答も載せておきます。

この DO LOOP 0回 1回 問題については、ループという言葉の定義上 0回 1回も反復ではないので、最低 2回回るべきという冗談の提案がされた記事を見たのですが、すぐ出てこない。

女子力対決

◆Mitchell, G., 1957: Programmer's Primer for FORTRAN Automatic Coding System for the IBM 704

Programmer's Primer for FORTRAN Automatic Coding System for the IBM 704 | 102665486 | Computer History Museum

f:id:fortran66:20170625033035p:plain
(Richard L. W.(ed.), History of Programming Languages p.65)

Adams, J. C., 1974: CDC 6600/7600 Primer

6600/7600 Primer | OpenSky Repository

Niklaus Wirth: The History of Modula-2 and Oberon

The History of Modula-2 and Oberon - ETH - Computer Science

Modern Fortran は ALGOL 系の言語から強い影響を受けています。特に ALGOL からは block、PASCAL からは構造化・型チェック、Modula-2 からは module, Oberon(就中 Oberon-2) からは OO (Object Oriented) が取り入れられています。

その ALGOL, PASCAL, Modula-2, Oberon を作り上げてきた Wirth の回顧的評論が表題のものです。前の言語の失敗した機能を挙げて、次の言語で削除・追加していく選択が興味深いです。

Fortran では class の inheritance が type extension と呼ばれるのは Oberon からきているようです。Wirth は type bound procedure という構造を取ることにより、従来の手続き型プログラミングの枠の中で OO の機能が実現できると説いています。

Niklaus Wirth


ホーアの、言語の特徴は取り入れなかった機能により強く出る、というのも面白い意見だと思いました。

C.A.R. Hoare used to remark that a language is indeed defined by the features it includes, but more so even by those which it excludes. My own guide-line was to omit features, whose correct semantics and best form were still unknown.

Fortran には取り入れられていない PASCAL の集合型、部分範囲型、variant レコードなどが、何故駄目だったかなどについても少し述べています。

またハードウェアの進歩がソフトウェアの方に影響するということについても触れています。


The Programming Language Oberon-2


www.youtube.com
モリー1M の FPGARISC 命令を読み込ませて Oberon を動かしている模様。集大成?