How do you “maintain” a computational algorithm that was carefully designed and withstood the test of time over decades?
How do you “maintain” a computational algorithm that was carefully designed and withstood the test of time over decades?
The citations in the Julia source file are certainly newer - Abramowitz and Stegun was basically all I had.
I think the REDUCE functions were considered quite fast (for higher precision) at the time, but it was certainly true that they weren't tested as thoroughly as would be the norm now.
If anything, my understanding is that too many of the newer languages and runtimes are made with the idea that they must have the full tooling in the language and runtime. As opposed to in the past, where many of these subprograms would be written to be called from whatever software was being written for the machines.
- Hardware dies, logical or physical storage needs to be reloaded
- Algorithm is challenged as incorrect, needs to be tested
- Underlying hardware infrastructure adjusts to 64-bit hardware, and returns different values
- Intel decides to muck with the sine function near 0 (https://news.ycombinator.com/item?id=8434128, https://www.cs.earlham.edu/~dusko/cs63/fdiv.html, https://github.com/torvalds/linux/blob/v5.9/arch/x86/kernel/...)
and so on
That said, my assertion was that evidence is the algorithms in question are still valid. Usually, they are still champions in speed.
Certainly, folks have had to port and maintain the fortran compilers. Especially so to add targets.
But the very stability of fortran, the language, is a big boon to those implementations not having bit rot. And while I know they could be reimplemented, in what language? And to what real advantage?
Some people seem to think these programs are ancient and unchanging. They're updated regularly. Otherwise they'd quickly be superseded by better implementations.
Fortran 90 and later are different enough to modern programming languages but Fortran 77 is an even bigger step back.