2
;;;; Author: Paul Dietz
3
;;;; Created: Tue Sep 2 19:36:22 2003
4
;;;; Contains: Tests of EXPT
11
(signals-error (expt) program-error)
15
(signals-error (expt 1 1 1) program-error)
19
(signals-error (expt 1 1 nil nil) program-error)
29
(loop for i from -1000 to 1000
30
always (eql (expt i 0) 1))
34
(loop for i = (random 1.0s3)
36
always (eql (expt i 0) 1.0s0))
40
(loop for i = (random 1.0f6)
42
always (eql (expt i 0) 1.0f0))
46
(loop for i = (random 1.0d10)
48
always (eql (expt i 0) 1.0d0))
52
(loop for i = (random 1.0l10)
54
always (eql (expt i 0) 1.0l0))
58
(loop for i from -1000 to 1000
60
always (eql (expt c 0) 1))
64
(loop for i = (random 1.0s3)
67
always (eql (expt c 0) #c(1.0s0 0.0s0)))
71
(loop for i = (random 1.0f6)
74
always (eql (expt c 0) #c(1.0f0 0.0f0)))
78
(loop for i = (random 1.0d10)
81
always (eql (expt c 0) #c(1.0d0 0.0d0)))
85
(loop for i = (random 1.0l10)
88
always (eql (expt c 0) #c(1.0l0 0.0l0)))
92
(loop for x in *numbers*
93
unless (or (floatp (realpart x))
99
(loop for x in *rationals*
100
unless (and (eql (expt x 2) (* x x))
102
(eql (expt x -1) (/ x))))
124
for zero in '(0.0s0 0.0f0 0.0d0 0.0l0)
126
(loop for i from -1000 to 1000
128
(eql (expt i zero) (float 1 zero)))))
133
for zero in '(0.0s0 0.0f0 0.0d0 0.0l0)
135
(loop for i from -1000 to 1000
137
(eql (expt (float i 0.0s0) zero) (float 1 zero)))))
142
for zero in '(0.0f0 0.0d0 0.0l0)
144
(loop for i from -1000 to 1000
146
(eql (expt (float i 0.0f0) zero) (float 1 zero)))))
151
for zero in '(0.0d0 0.0l0)
153
(loop for i from -1000 to 1000
155
(eql (expt (float i 0.0d0) zero) (float 1 zero)))))
183
(<= (realpart (expt -8 1/3)) 0.0)
188
;;; I need to think more about how to do approximate float
189
;;; equality in a principled way.
192
(loop for bound in '(1.0s4 1.0f6 1.0d8 1.0l8)
193
for ebound in (list short-float-epsilon single-float-epsilon
194
double-float-epsilon long-float-epsilon)
195
for ebound2 = (max (* 2 ebound) (/ bound))
197
(loop for x = (1+ (random 1.0f6))
199
for s2 = (expt x 1/2)
200
for error = (/ (abs (- s2 s2)) x)
202
unless (< error ebound2)
203
collect (list x s1 s2)))
207
(loop for bound in '(1.0s4 1.0f6 1.0d8 1.0l8)
208
for ebound in (list short-float-epsilon single-float-epsilon
209
double-float-epsilon long-float-epsilon)
210
for ebound2 = (max (* 2 ebound) (/ bound))
212
(loop for x = (- (1+ (random 1.0f6)))
214
for s2 = (expt x 1/2)
215
for error = (/ (abs (- s2 s2)) x)
217
unless (< error ebound2)
218
collect (list x s1 s2)))