Para ser un lenguaje centrado en las matemáticas y la computación científica, siempre estoy desconcertado por la falta total de rutinas matemáticas útiles en la biblioteca estándar de Fortran. Uno esperaría que se envíe al menos con una rutina para calcular la desviación estándar y la media, pero este no es el caso. En particular, con la introducción de Fortran 90 y la adición de módulos (reduciendo así la contaminación del espacio de nombres), no veo ninguna razón por esta crítica falta de servicios.
Me gustaría escuchar su conocimiento sobre por qué este es el caso.
language-features
fortran
Stefano Borini
fuente
fuente
Respuestas:
Cuando se desarrolló FORTRAN, no existía la portabilidad del código. Era absolutamente rutinario para el compilador FORTRAN en una máquina aceptar un lenguaje ligeramente diferente que el compilador en otra máquina. La variación más común fue la longitud del nombre. El IBM 1130 FORTRAN permitió cinco caracteres, el DEC-10 permitió seis, el CDC 6600 (mi primera máquina, mi primer lenguaje de ensamblaje real) permitió siete. Las matrices tridimensionales fueron requeridas por el lenguaje; al menos un miniordenador (¿Varian 76?) FORTRAN permitió matrices de siete dimensiones.
Las empresas ampliaron habitualmente sus idiomas FORTRAN, para que sus máquinas fueran más atractivas para los clientes y, aunque las extensiones podrían proporcionar una funcionalidad similar, nunca fueron idénticas. Muchos compiladores proporcionaron extensiones para hacer E / S de archivos y administración de superposición, y nunca fueron idénticos. A veces ni siquiera estaban cerca.
Las conversiones de FORTRAN a FORTRAN, portar un programa de una máquina a otra, era una industria casera muy ocupada, y los tipos que podían hacerlo siempre podían encontrar trabajo. (Trabajé en dos de esas conversiones: ayudé a portar el juego original "Star Trek" de Matuszek-Reynolds-McGehearty-Cohen del CDC 6600 al DEC-10, y porté un programa de análisis de EKG de Varian 76 a TI 990. No hay dos tales proyectos fueron idénticos)
Este tipo de cosas hacía muy, muy difícil proporcionar bibliotecas "estándar", aunque algunas personas lo intentaron. La biblioteca IMSL era la más grande, pero se enviaba en forma de código fuente y se requería que el cliente funcionara en su sistema.
Además: se esperaba que los programadores de FORTRAN tuvieran una formación razonable en métodos numéricos. Casi todos los programadores de FORTRAN en el planeta en esos días aprendieron a hacer desviaciones estándar y malas para sí mismos, como tarea. Todos los programadores de FORTRAN aprendieron bisección e iteración Newton-Raphson (hoy en día llamado "Método de Newton") en la escuela. Los métodos de Runge-Kutta se enseñaron, generalmente de memoria, y, en ese momento, los integradores de Runge-Kutta de sexto orden eran ejemplos de libros de texto. (Fue mucho más tarde que la gente descubrió que Runge-Kutta de cuarto orden era el "punto óptimo" en la curva de rentabilidad).
Y: los programadores RARAMENTE cambiaron las computadoras sin cambiar también los trabajos. Se esperaba que los programadores que se movieron y se les exigiera que fueran muy buenos para aprender cómo funcionaban los nuevos sistemas y para detectar las diferencias.
En ese entorno, habrá muy poca necesidad de un código STDDEV "estándar", cuando era algo que cualquier programador FORTRAN de nivel de entrada competente podría escribir mientras dormía.
fuente
Personalmente, creo que este hecho se debe a la biblioteca MKL . Si está buscando una biblioteca matemática de alto rendimiento, entonces MKL es lo que necesita. No es tan caro, y un laboratorio que realiza computación matemática en sus proyectos puede permitírselo.
fuente
cernlib hizo mucho de lo que pides para las personas que trabajan en física de alta energía y aún es útil.
fuente
BLAS y LAPACK son bibliotecas Fortran estándar de facto.
fuente
El lenguaje FORmulaTRANslation fue diseñado para facilitarle la escritura de sus propias fórmulas. ¿Por qué debería Fortran definir una función media cuando puede escribir en Fortran 90 en adelante?
xmean = sum (x) / max (tamaño (x), 1)?
fuente