www.fortrancoding.com という名の謎の Fortran 専門の質問サイト
がありまして、紫色の背景に灰色の文字で、はなはだ見にくいです。
質疑応答が書かれていますが、stackoverflow とか、どこかからの転載なのか、よく分かりません。内容はやや高度なものが多い気がします。
Discussion about FORTRAN - www.fortrancoding.com
遠目に見ていきたいと思います。
がありまして、紫色の背景に灰色の文字で、はなはだ見にくいです。
質疑応答が書かれていますが、stackoverflow とか、どこかからの転載なのか、よく分かりません。内容はやや高度なものが多い気がします。
Discussion about FORTRAN - www.fortrancoding.com
遠目に見ていきたいと思います。
リンク集
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
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 風味になったことを受けてか、この文書は結構な分量があります。
内容的には、
の四つになっています。いずれも細々とした内容で量も多いです。46ページもあります。
従来 denormal number と呼んでいた数が、今後 subnormal number と呼び名を変えるそうです。
サブがノーマルだなんて…
どっちかというと危脳丸…
(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 続行するには何かキーを押してください . . .
今まで支那系サイトでは本の違法スキャンと割れソフトぐらいしか見たことがありませんでしたが、最近まともな情報の載ったサイトが出現し始めています。
中々、豊富な情報を持ったサイトです。
fcode.cn
スパコンに金を注ぎ込み始めたあたりから、検索で引っかかる Fortran がらみの本も多くなってきた気がします。(根拠主観w)Metcalf & Reid Stephen Chapman の本も F95/03 あたりまでは翻訳されており、日本より Fortran に対して熱心感があります。
かつて Intel が7割引きのダンピングで中国にスパコンを売ったりしていました。クリントン時代にはダンピングを理由に日本製コンピュータに300%の関税などを掛けていたことが思い出されます。
引用 intel visual fortran と MS visual studio の対応表
(Richard L. W.(ed.), History of Programming Languages p.70)
ついでに LOOP 0回 1回 問題の回答も載せておきます。
この DO LOOP 0回 1回 問題については、ループという言葉の定義上 0回 1回も反復ではないので、最低 2回回るべきという冗談の提案がされた記事を見たのですが、すぐ出てこない。
(Richard L. W.(ed.), History of Programming Languages p.65)
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 の機能が実現できると説いています。
ホーアの、言語の特徴は取り入れなかった機能により強く出る、というのも面白い意見だと思いました。
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 の FPGA に RISC 命令を読み込ませて Oberon を動かしている模様。集大成?