Um eine Sprache zu sein, die sich auf Mathematik und wissenschaftliches Rechnen konzentriert, bin ich immer wieder verblüfft über den völligen Mangel an nützlichen mathematischen Routinen in der Fortran-Standardbibliothek. Man würde erwarten, dass es zumindest mit einer Routine zur Berechnung der Standardabweichung und des Mittelwerts ausgeliefert wird, aber dies ist nicht der Fall. Insbesondere mit der Einführung von Fortran 90 und der Hinzufügung von Modulen (wodurch die Verschmutzung des Namespace verringert wird) sehe ich keinen Grund für diesen kritischen Mangel an Diensten.
Ich würde gerne Ihr Wissen darüber hören, warum dies der Fall ist.
language-features
fortran
Stefano Borini
quelle
quelle
Antworten:
Als FORTRAN entwickelt wurde, gab es keine Portabilität von Code. Es war absolut Routine für den FORTRAN-Compiler auf einem Computer, eine etwas andere Sprache zu akzeptieren als der Compiler auf einem anderen Computer. Die häufigste Variante war die Namenslänge. Der IBM 1130 FORTRAN erlaubte fünf Zeichen, der DEC-10 sechs, der CDC 6600 (meine erste Maschine, meine erste echte Assemblersprache) sieben. Die Sprache erforderte dreidimensionale Arrays. Mindestens ein Minicomputer (Varian 76?) FORTRAN erlaubte siebendimensionale Arrays.
Unternehmen haben ihre FORTRAN-Sprachen routinemäßig erweitert, um ihre Maschinen für Kunden attraktiver zu machen, und obwohl die Erweiterungen ähnliche Funktionen bieten könnten, waren sie nie identisch. Viele Compiler stellten Erweiterungen für die Datei-E / A- und Overlay-Verwaltung bereit und waren nie identisch. Manchmal waren sie nicht einmal in der Nähe.
FORTRAN-FORTRAN-Konvertierungen, bei denen ein Programm von einer Maschine auf eine andere portiert wurde, waren eine sehr geschäftige Heimindustrie, und die Leute, die das konnten, konnten immer Arbeit finden. (Ich habe zwei solcher Konvertierungen durchgeführt: Ich habe geholfen, das ursprüngliche "Star Trek" -Spiel von Matuszek-Reynolds-McGehearty-Cohen vom CDC 6600 auf den DEC-10 zu portieren, und ich habe ein EKG-Analyseprogramm von Varian 76 auf TI 990 portiert. Nr. Zwei solche Projekte waren identisch.)
Diese Art von Dingen machte es sehr, sehr schwierig, "Standard" -Bibliotheken bereitzustellen, obwohl einige Leute es versuchten. Die IMSL-Bibliothek war die größte, wurde jedoch in Quellcodeform ausgeliefert, und der Kunde musste sie auf seinem System zum Laufen bringen.
Außerdem: Von FORTRAN-Programmierern wurde ein angemessener Hintergrund in numerischen Methoden erwartet. Nahezu jeder FORTRAN-Programmierer auf dem Planeten lernte damals, wie man als Hausaufgabe Mittelwert und Standardabweichung für sich selbst macht. Jeder FORTRAN-Programmierer lernte in der Schule Halbierung und Newton-Raphson-Iteration (heutzutage als "Newton-Methode" bezeichnet). Runge-Kutta-Methoden wurden normalerweise auswendig gelehrt, und zu dieser Zeit waren Runge-Kutta-Integratoren 6. Ordnung Lehrbuchbeispiele. (Es war viel später, als die Leute herausfanden, dass Runge-Kutta 4. Ordnung der "Sweet Spot" auf der Kosten-Nutzen-Kurve war.)
Und: Programmierer haben selten Computer gewechselt, ohne auch Jobs zu wechseln. Von den Programmierern, die sich bewegten, wurde erwartet UND ERFORDERLICH, dass sie sehr gut lernen, wie die neuen Systeme funktionieren, und die Unterschiede aufgreifen.
In dieser Umgebung wird es kaum einen "Standard" -STDDEV-Code geben, wenn es etwas war, das jeder kompetente FORTRAN-Einsteigerprogrammierer im Schlaf schreiben konnte.
quelle
Persönlich denke ich, dass diese Tatsache auf die MKL- Bibliothek zurückzuführen ist. Wenn Sie nach einer leistungsstarken Mathematikbibliothek suchen, ist MKL genau das Richtige für Sie. Es ist nicht so teuer, und ein Labor, das in seinen Projekten mathematische Berechnungen durchführt, kann es sich leisten.
quelle
cernlib hat viel getan, was Sie für Leute verlangen, die in der Hochenergiephysik arbeiten, und es ist immer noch nützlich.
quelle
BLAS und LAPACK sind de facto Standard-Fortran-Bibliotheken.
quelle
Die FORmulaTRANslation-Sprache wurde entwickelt, um Ihnen das Schreiben eigener Formeln zu erleichtern. Warum sollte Fortran eine mittlere Funktion definieren, wenn Sie ab Fortran 90 schreiben können?
xmean = Summe (x) / max (Größe (x), 1)?
quelle