数学と科学計算に焦点を当てた言語であるために、私は常にFortran標準ライブラリに有用な数学ルーチンがまったくないことに困惑しています。少なくとも標準偏差と平均を計算するルーチンが付いて出荷されることを期待しますが、これは当てはまりません。特にFortran 90の導入とモジュールの追加(したがってネームスペース汚染の低減)により、このサービスの重大な欠如の理由はわかりません。
これが事実である理由についてのあなたの知識を聞きたいのですが。
数学と科学計算に焦点を当てた言語であるために、私は常にFortran標準ライブラリに有用な数学ルーチンがまったくないことに困惑しています。少なくとも標準偏差と平均を計算するルーチンが付いて出荷されることを期待しますが、これは当てはまりません。特にFortran 90の導入とモジュールの追加(したがってネームスペース汚染の低減)により、このサービスの重大な欠如の理由はわかりません。
これが事実である理由についてのあなたの知識を聞きたいのですが。
回答:
FORTRANが開発された当時は、コードの移植性などはありませんでした。あるマシンのFORTRANコンパイラが別のマシンのコンパイラとは少し異なる言語を受け入れることは、絶対に日常的なことでした。最も一般的なバリエーションは名前の長さでした。IBM 1130 FORTRANは5文字、DEC-10は6文字、CDC 6600(私の最初のマシン、私の最初の実際のアセンブリ言語)は7文字を許可しました。言語には3次元配列が必要でした。少なくとも1台のミニコンピューター(Varian 76?)FORTRANでは、7次元配列を使用できました。
企業は日常的にFORTRAN言語を拡張して、マシンを顧客にとってより魅力的なものにしました。また、拡張機能が同様の機能を提供する可能性はありますが、まったく同じではありませんでした。多くのコンパイラーは、ファイルI / Oおよびオーバーレイ管理を行うための拡張機能を提供しましたが、それらはまったく同じではありませんでした。時々、彼らは近くさえいませんでした。
プログラムをあるマシンから別のマシンに移植するFORTRANからFORTRANへの変換は、非常に忙しい家内産業であり、それを実行できる人は常に仕事を見つけることができました。(私はそのような2つの変換を行いました:オリジナルのMatuszek-Reynolds-McGehearty-Cohen "Star Trek"ゲームをCDC 6600からDEC-10に移植するのを助け、EKG分析プログラムをVarian 76からTI 990に移植しました。そのようなプロジェクトは同一でした。)
この種のことにより、「標準」ライブラリを提供することは非常に困難になりました。IMSLライブラリーが最大でしたが、ソースコード形式で出荷され、顧客は自分のシステムで機能させる必要がありました。
また、FORTRANプログラマーは、数値解法において妥当なバックグラウンドを持っていることが期待されていました。当時の地球上のほとんどすべてのFORTRANプログラマーは、宿題として自分の平均値と標準偏差をどのように行うかを学びました。すべてのFORTRANプログラマーは、学校で二分法とニュートンラフソン反復法(現在は「ニュートン法」と呼ばれています)を学びました。ルンゲクッタ法は、通常は無作法で教えられ、当時、6次のルンゲクッタ積分器は教科書の例でした。(人々が、4次のルンゲクッタが費用対効果曲線の「スイートスポット」であることを理解したのはずっと後でした。)
そして:プログラマはめったに仕事を変えることなくコンピュータを変えました。動き回ったプログラマは、新しいシステムがどのように機能するかを学び、その違いを理解するのに非常に優れていることが期待され、要求されていました。
その環境では、有能な初心者レベルのFORTRANプログラマーがスリープ状態で書き込むことができるものであったときに、「標準」のSTDDEVコードの呼び出しはほとんどありません。
個人的には、MKLライブラリーが原因だと思います。高性能の数学ライブラリを探しているなら、MKLが必要です。それはそれほど高価ではなく、そのプロジェクトで数学計算を実行する実験室はそれを買う余裕があります。
cernlibは、高エネルギー物理学で働く人々にあなたが求める多くのことをしてくれましたが、それはまだ役に立ちます。
FORmulaTRANslation言語は、独自の数式を簡単に記述できるように設計されています。Fortran 90以降で記述できるのに、なぜFortranが平均関数を定義すべきなのか
xmean = sum(x)/ max(size(x)、1)?