diff options
Diffstat (limited to 'src/nbc/kahan.sml')
-rw-r--r-- | src/nbc/kahan.sml | 31 |
1 files changed, 0 insertions, 31 deletions
diff --git a/src/nbc/kahan.sml b/src/nbc/kahan.sml deleted file mode 100644 index 70c6b47..0000000 --- a/src/nbc/kahan.sml +++ /dev/null @@ -1,31 +0,0 @@ -(* Kahan summation *) - -signature KAHAN = sig - type t - val zero: t - val add: t * real -> t - val sum: t -> real - val sequence: real Sequence.t -> real - val list: real list -> real - val array: real array -> real -end - -structure Kahan :> KAHAN = struct - type t = real * real - val zero = (0.0, 0.0) - fun add ((s, c), x) = - let - val y = x - c - val t = s + y - in - (t, t - s - y) - end - fun sum (s, c) = s - local - fun swappedAdd (a, b) = add (b, a) - in - fun sequence e = sum (Sequence.fold swappedAdd zero e) - fun list l = sum (foldl swappedAdd zero l) - fun array a = sum (Array.foldl swappedAdd zero a) - end -end |