This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

Re: Q: float arrays
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 1996-10-31 (15:28) From: Thorsten Ohl Subject: Re: Q: float arrays
```
>>>>> "Xavier" == Xavier Leroy <Xavier.Leroy@inria.fr> writes:

Xavier> Polymorphism and higher-order functions don't mix well with
Xavier> high performance. If you need Fortran-like performance, there
Xavier> are cases where you must write Fortran-style code.

I know that I'm asking too much, but wouldn't it be nice it the
compiler did it for me?   In the example at hand,

let f2 = map (function (p,p') -> (p*.p'))

the compiler could inline the multiplication automagically, iff it

A trivial example is code like the following:

let exponentiate make_unit eps norm plus minus times scale x =
let u = make_unit x in
let rec sumup s n x1 xn =
if norm (xn) <= eps *. norm (minus s u) then
s
else
sumup (plus s xn) (n +. 1.0) x1 (scale (1.0 /. n) (times x1 xn))
in
(* usually, times x u == x, but u can be a projector which
will speed up things for special cases.  *)
sumup u 2.0 x (times x u)

let exp_ =
exponentiate (fun _ -> 1.0) 1e-14 abs_float ( +. ) ( -. ) ( *. ) ( *. )

let exp_matrix =
exponentiate unit_like 1e-14 infinity_norm add subtract multiply scale_matrix

Here partial application really shines and it could shine even
brighter if there was no speed penalty ...

Cheers,
-Thorsten

--
Thorsten Ohl, Physics Department, TH Darmstadt --- PGP: AF 38 FF CE 03 8A 2E A7
http://crunch.ikp.physik.th-darmstadt.de/~ohl/ -------- 8F 2A C1 86 8C 06 32 6B

```