Path: utzoo!attcan!uunet!tut.cis.ohio-state.edu!network!ucsd!chem.ucsd.edu!tps From: tps@chem.ucsd.edu (Tom Stockfisch) Newsgroups: comp.lang.c Subject: Re: C vs. FORTRAN Message-ID: <517@chem.ucsd.EDU> Date: 11 Aug 89 05:23:52 GMT References: <3288@ohstpy.mps.ohio-state.edu> <225800204@uxe.cso.uiuc.edu> <14523@bfmny0.UUCP> <14014@lanl.gov> Reply-To: tps@chem.ucsd.edu (Tom Stockfisch) Organization: Chemistry Dept, UC San Diego Lines: 69 In article <14014@lanl.gov> jlg@lanl.gov (Jim Giles) writes: >From article <14523@bfmny0.UUCP>, by tneff@bfmny0.UUCP (Tom Neff): >> [...] Software that works right, and early, >> is more important that a shaved MIP. [...] > In that case, Fortran is certainly a better choice than C for most > numerical computations. I have to disagree. > Fortunately, it also helps if you're after shaving a few MIPs as well. That's not true on most of the machines I use. In fact, for scientific programming that uses a lot of integer operations, C is almost always faster as well as more convenient because of built-in, portable bit operators and fewer restrictions on what constitutes an integer. > Consider, for example, a routine to do matrix multiply > on arbitrary sized and shaped matrices - both C an Fortran require the > programmer to express the iteration explicitly, but only C requires the > index calculations to be done explicitly. Not really. You can either use a macro, such as vecFn( a, nrow, ncol ) double *a; # define A( i, j ) a[ (i)*ncol + (j) ] { int i, j; ... A(i,j) ... } Or, better, use a storage allocator that returns a pointer to the first element of an array of pointers, each of which point to a row of your matrix. Then you have vecFn( a, nrow, ncol ) double **a; /* nrow X ncol pseudo-matrix */ { int i, j; ... a[i][j]; } Numerical algorithms have both a speed complexity and memory complexity, and portable storage allocation is a big win for numerical C programs. It's a major headache to edit and recompile fortran programs every time you want to change the size of your problem. And if you don't change it back downwards you wind up with a 1000X1000 matrix swapping to disk when your calculating the 10X10 case. Sparse matrices are also easier in C. > C++ does better, but only if the programmer has implemented a class... Actually, the major advantage of C++ for numerical programming is complex numbers. This is the only place I use fortran, as C++ is not yet universally available. >when will we see a Fortran++ ? It would have to be called " FORTRAN = FORTRAN + 1.0E+00". I think its a bad idea to make a new language upwardly compatable from the Original Language. When will we see Fortran die and fade away? -- || Tom Stockfisch, UCSD Chemistry tps@chem.ucsd.edu