diff --git a/benchmarks/r6rs-benchmarks/ray.ss b/benchmarks/r6rs-benchmarks/ray.ss index 6225f38..49b04b9 100644 --- a/benchmarks/r6rs-benchmarks/ray.ss +++ b/benchmarks/r6rs-benchmarks/ray.ss @@ -88,7 +88,7 @@ (let ((h (intersect s pt ray))) (if h (let ((d (distance h pt))) - (if (fl< d dist) + (if (flinexact floor ceiling round log fl=? fl? fl>=? fl+ fl- fl* fl/ flsqrt flmin flzero? flnegative? sin cos atan sqrt - flround) + flround flmax) (import (ikarus system $fx) (ikarus system $flonums) @@ -150,7 +150,7 @@ fl=? fl? fl>=? fl+ fl- fl* fl/ flsqrt flmin flzero? flnegative? sin cos atan sqrt - flround)) + flround flmax)) (define (fixnum->flonum x) (foreign-call "ikrt_fixnum_to_flonum" x)) @@ -815,6 +815,27 @@ [else (f (binary/ a b) (car ls) (cdr ls))]))])) + (define flmax + (case-lambda + [(x y) + (if (flonum? x) + (if (flonum? y) + (if ($fl< x y) + y + x) + (error 'flmax "~s is not a flonum" y)) + (error 'flmax "~s is not a flonum" x))] + [(x y z . rest) + (let f ([a (flmax x y)] [b z] [ls rest]) + (cond + [(null? ls) (flmax a b)] + [else + (f (flmax a b) (car ls) (cdr ls))]))] + [(x) + (if (flonum? x) + x + (error 'flmax "~s is not a number" x))])) + (define max (case-lambda [(x y) diff --git a/src/makefile.ss b/src/makefile.ss index 63e48eb..8d047d1 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -398,6 +398,7 @@ [flnegative? i rfl] [flpositive? i rfl] [flabs i rfl] + [flmax i rfl] [flround i rfl] [fixnum->string i] [string->flonum i]