Changeset 13532
- Timestamp:
- Mar 14, 2010, 11:30:41 PM (15 years ago)
- File:
-
- 1 edited
-
trunk/source/level-0/l0-numbers.lisp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/level-0/l0-numbers.lisp
r13392 r13532 1140 1140 #+32-bit-target 1141 1141 `(target::with-stack-short-floats ((fnum ,number) 1142 (f2))1142 (f2)) 1143 1143 (let ((res (%unary-truncate (%short-float/-2! fnum ,divisor f2)))) 1144 1144 (values res 1145 1145 (%short-float--2 fnum (%short-float*-2! (%short-float res f2) ,divisor f2))))) 1146 #+64-bit-target1146 #+64-bit-target 1147 1147 `(let* ((temp (%short-float ,number)) 1148 1148 (res (%unary-truncate (/ (the short-float temp) … … 1152 1152 (the short-float (* (the short-float (%short-float res)) 1153 1153 (the short-float ,divisor))))))) 1154 )1154 ) 1155 1155 (number-case number 1156 1156 (fixnum 1157 (if (eql number target::target-most-negative-fixnum) 1158 (if (zerop divisor) 1159 (error 'division-by-zero :operation 'truncate :operands (list number divisor)) 1160 (with-small-bignum-buffers ((bn number)) 1161 (multiple-value-bind (quo rem) (truncate bn divisor) 1162 (if (eq quo bn) 1163 (values number rem) 1164 (values quo rem))))) 1165 (number-case divisor 1166 (fixnum (if (eq divisor 1) (values number 0) (%fixnum-truncate number divisor))) 1167 (bignum (values 0 number)) 1168 (double-float (truncate-rat-dfloat number divisor)) 1169 (short-float (truncate-rat-sfloat number divisor)) 1170 (ratio (let ((q (truncate (* number (%denominator divisor)) ; this was wrong 1171 (%numerator divisor)))) 1172 (values q (- number (* q divisor)))))))) 1157 (number-case divisor 1158 (fixnum (if (eq divisor 1) (values number 0) (%fixnum-truncate number divisor))) 1159 (bignum (values 0 number)) 1160 (double-float (truncate-rat-dfloat number divisor)) 1161 (short-float (truncate-rat-sfloat number divisor)) 1162 (ratio (let ((q (truncate (* number (%denominator divisor)) ; this was wrong 1163 (%numerator divisor)))) 1164 (values q (- number (* q divisor))))))) 1173 1165 (bignum (number-case divisor 1174 1166 (fixnum (if (eq divisor 1) (values number 0) … … 1199 1191 (/ (the short-float number) 1200 1192 (the short-float divisor))))) 1201 (values res1202 (- (the short-float number)1203 (* (the short-float (%short-float res))1204 (the short-float divisor))))))1193 (values res 1194 (- (the short-float number) 1195 (* (the short-float (%short-float res)) 1196 (the short-float divisor)))))) 1205 1197 ((fixnum bignum ratio) 1206 1198 #+32-bit-target 1207 1199 (target::with-stack-short-floats ((fdiv divisor) 1208 (f2))1200 (f2)) 1209 1201 (let ((res (%unary-truncate (%short-float/-2! number fdiv f2)))) 1210 1202 (values res
Note:
See TracChangeset
for help on using the changeset viewer.
