There's a great article and discussion thread over at Good Math, Bad Math on what languages are good for mathematical calculation.
Many people commonly say that C/C++ is fewer steps away from a direct translation to assembly code, and is thus faster than a language such as OCaml or Java. GMBM shows this is not the case, though. Basically, he shows that in C/C++, you could have the following situation. You have two pointers pointing to two arrays. The compiler doesn't know if the arrays are actually two distinct arrays or not (they may point to the same thing), so the compiler must assume that they are. In languages such as Fortran and OCaml, the compiler does have this information, and so can provide serious code optimizations.