A categorical programming language
Revision | 00f0108a7c05a0ab9419bae62b233e2a9a0f9622 (tree) |
---|---|
Time | 2023-02-26 16:43:31 |
Author | Corbin <cds@corb...> |
Commiter | Corbin |
Force the principal branch for f-sqrt.
This halves the search space.
@@ -253,7 +253,7 @@ | ||
253 | 253 | ((== o #f) (fp-<=° i2 i1))))) |
254 | 254 | ((== expr 'f-add) (eval-binary° fp-+° i o)) |
255 | 255 | ((== expr 'f-mul) (eval-binary° fp-*° i o)) |
256 | - ((== expr 'f-sqrt) (fp-pos° i) (== o `(left ,f)) | |
256 | + ((== expr 'f-sqrt) (fp-pos° i) (== o `(left ,f)) (fp-pos° f) | |
257 | 257 | (fresh (p) (conso f f p) (eval-binary° fp-*° p i))) |
258 | 258 | ((== expr 'f-sqrt) (== o '(right star)) (fp-neg° i))) |
259 | 259 | ; (project (expr s t i o) (begin (pp `(eval° ,expr ,s ,t ,i ,o)) succeed)) |
@@ -220,8 +220,10 @@ | ||
220 | 220 | ; See p6. |
221 | 221 | (define (fp-*° f1 f2 r) |
222 | 222 | (fresh (s1 s2 rs) |
223 | + ; (project (f1 f2 r) (begin (pp `(fp-*? ,f1 ,f2 ,r)) succeed)) | |
223 | 224 | (sign-xor° s1 s2 rs) |
224 | 225 | (fp-sign° f1 s1) (fp-sign° f2 s2) (fp-sign° r rs) |
226 | + ; (project (f1 f2 r) (begin (pp `(fp-* signs ,f1 ,f2 ,r)) succeed)) | |
225 | 227 | (conde |
226 | 228 | ; XXX wrong WRT IEEE 754! |
227 | 229 | ((fp-zero° r) (conde ((fp-zero° f1)) ((fp-zero° f2)))) |
@@ -230,9 +232,13 @@ | ||
230 | 232 | (fp-decomp° f1 s1 e1 m1) |
231 | 233 | (fp-decomp° f2 s2 e2 m2) |
232 | 234 | (*o m1 m2 m1m2) |
235 | + ; (project (m1 m2 m1m2) (begin (pp `(fp-* mantissas ,m1 ,m2 ,m1m2)) succeed)) | |
233 | 236 | (drop-leastsig-bit° m1m2 rm lsb) |
234 | 237 | (compute-exp° e1 e2 lsb re) |
238 | + ; (project (e1 e2 re) (begin (pp `(fp-* exponents ,e1 ,e2 ,re)) succeed)) | |
235 | 239 | (conde |
236 | 240 | ((fp-inf° r) (fp-overflow° re)) |
237 | - ((fp-decomp° r rs re rm)))))))) | |
241 | + ((fp-decomp° r rs re rm)))))) | |
242 | + ; (project (f1 f2 r) (begin (pp `(fp-*° ,f1 ,f2 ,r)) succeed)) | |
243 | + )) | |
238 | 244 | ) |