diff --git a/mats/5_3.ms b/mats/5_3.ms index b9aba3651..416465a1a 100644 --- a/mats/5_3.ms +++ b/mats/5_3.ms @@ -2592,6 +2592,14 @@ (eqv? (lcm 10.0 0.0 0.0 0.0) 0.0) (eqv? (lcm 0.0 6.0 7.0 10.0) 0.0) (eqv? (lcm 10.0 6.0 7.0 0.0) 0.0) + (eqv? (lcm 3E307 5E307) +inf.0) + (eqv? (lcm #e3E999 1.0) +inf.0) + (begin + ;; make sure the optimizer doesn't assume an integer result + (define ($lcm-result x) (if (integer? (lcm x 1.0)) 'int 'non-int)) + #t) + (eq? ($lcm-result 5) 'int) + (eq? ($lcm-result #e3E999) 'non-int) ) (mat expt diff --git a/s/primdata.ss b/s/primdata.ss index 8fd3f243b..7650b0a5d 100644 --- a/s/primdata.ss +++ b/s/primdata.ss @@ -223,7 +223,7 @@ (div0 [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) (mod0 [sig [(real real) -> (real)]] [flags arith-op mifoldable discard]) (gcd [sig [(integer ...) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) - (lcm [sig [(integer ...) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) + (lcm [sig [(integer ...) -> (real)]] [flags arith-op mifoldable discard ieee r5rs]) ; uinteger or +inf.0 (numerator [sig [(rational) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) (denominator [sig [(rational) -> (integer)]] [flags arith-op mifoldable discard ieee r5rs]) (floor [sig [(real) -> (real)]] [flags arith-op mifoldable discard safeongoodargs ieee r5rs])