Skip to content

Commit fd4227e

Browse files
committed
More sound rules (mostly using fabs)
1 parent a641cc4 commit fd4227e

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/core/rules.rkt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
(define-rules arithmetic
155155
[mult-flip (/ a b) (* a (/ 1 b))]
156156
[mult-flip-rev (* a (/ 1 b)) (/ a b)]
157-
[div-flip (/ a b) (/ 1 (/ b a)) #:unsound] ; unsound @ a = 0, b != 0
157+
[div-flip (/ a b) (sound-/ 1 (sound-/ b a 0) (/ a b))]
158158
[div-flip-rev (/ 1 (/ b a)) (/ a b)])
159159

160160
; Fractions
@@ -171,8 +171,8 @@
171171

172172
(define-rules polynomials
173173
[sqr-pow (pow a b) (* (pow a (/ b 2)) (pow a (/ b 2))) #:unsound] ; unsound @ a = -1, b = 1
174-
[flip-+ (+ a b) (sound-/ (- (* a a) (* b b)) (- a b) (+ a b))] ; unsound @ a = b = 1
175-
[flip-- (- a b) (sound-/ (- (* a a) (* b b)) (+ a b) (- a b))]) ; unsound @ a = -1, b = 1
174+
[flip-+ (+ a b) (sound-/ (- (* a a) (* b b)) (- a b) (+ a b))]
175+
[flip-- (- a b) (sound-/ (- (* a a) (* b b)) (+ a b) (- a b))])
176176

177177
; Difference of cubes
178178
(define-rules polynomials
@@ -181,7 +181,7 @@
181181
[difference-cubes-rev (* (+ (* a a) (+ (* b b) (* a b))) (- a b)) (- (pow a 3) (pow b 3))]
182182
[sum-cubes-rev (* (+ (* a a) (- (* b b) (* a b))) (+ a b)) (+ (pow a 3) (pow b 3))])
183183

184-
(define-rules polynomials ; unsound @ a = b = 0
184+
(define-rules polynomials
185185
[flip3-+ (+ a b) (sound-/ (+ (pow a 3) (pow b 3)) (+ (* a a) (- (* b b) (* a b))) (+ a b))]
186186
[flip3-- (- a b) (sound-/ (- (pow a 3) (pow b 3)) (+ (* a a) (+ (* b b) (* a b))) (- a b))])
187187

@@ -245,8 +245,8 @@
245245
[sqrt-undiv (/ (sqrt x) (sqrt y)) (sqrt (/ x y))])
246246

247247
(define-rules arithmetic
248-
[sqrt-prod (sqrt (* x y)) (* (sqrt x) (sqrt y)) #:unsound] ; unsound @ x = y = -1
249-
[sqrt-div (sqrt (/ x y)) (/ (sqrt x) (sqrt y)) #:unsound] ; unsound @ x = y = -1
248+
[sqrt-prod (sqrt (* x y)) (* (sqrt (fabs x)) (sqrt (fabs y)))]
249+
[sqrt-div (sqrt (/ x y)) (/ (sqrt (fabs x)) (sqrt (fabs y)))]
250250
[add-sqr-sqrt x (* (sqrt x) (sqrt x)) #:unsound]) ; unsound @ x = -1
251251

252252
; Cubing
@@ -364,9 +364,9 @@
364364
[log-pow-rev (* b (log a)) (log (pow a b))])
365365

366366
(define-rules exponents
367-
[log-prod (log (* a b)) (+ (log a) (log b)) #:unsound] ; unsound @ a = b = -1
368-
[log-div (log (/ a b)) (- (log a) (log b)) #:unsound] ; unsound @ a = b = -1
369-
[log-pow (log (pow a b)) (* b (log a)) #:unsound]) ; unsound @ a = -1, b = 2
367+
[log-prod (log (* a b)) (+ (log (fabs a)) (log (fabs b)))]
368+
[log-div (log (/ a b)) (- (log (fabs a)) (log (fabs b)))]
369+
[log-pow (log (pow a b)) (* b (log (fabs a)))])
370370

371371
(define-rules exponents
372372
[sum-log (+ (log a) (log b)) (log (* a b))]

0 commit comments

Comments
 (0)