(the (eql #c(1.0 2.0))
x))))))))
-;; This was previously x86-only, with note:
-;; The x86 port used not to reduce the arguments of transcendentals
-;; correctly. On other platforms, we trust libm to DTRT.
-;; but it doesn't cost any real amount to just test them all
-(with-test (:name :range-reduction
- :fails-on ':x86-64)
- (flet ((almost= (x y)
- (< (abs (- x y)) 1d-5)))
- (macrolet ((foo (op value)
- `(assert (almost= (,op (mod ,value (* 2 pi)))
- (,op ,value)))))
- (let ((big (* pi (expt 2d0 70)))
- (mid (coerce most-positive-fixnum 'double-float))
- (odd (* pi most-positive-fixnum)))
- (foo sin big)
- (foo sin mid)
- (foo sin odd)
- (foo sin (/ odd 2d0))
-
- (foo cos big)
- (foo cos mid)
- (foo cos odd)
- (foo cos (/ odd 2d0))
-
- (foo tan big)
- (foo tan mid)
- (foo tan odd)))))
-
;; Leakage from the host could result in wrong values for truncation.
(with-test (:name :truncate)
(assert (plusp (sb-kernel:%unary-truncate/single-float (expt 2f0 33))))