Average Error: 32.1 → 32.1
Time: 1.7s
Precision: binary64
\[\sqrt{\mathsf{max}\left(0.0, \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right)\right) \cdot alphax\right) \cdot alphax + \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right)\right) \cdot alphay\right) \cdot alphay\right)}\]
\[\sqrt{\mathsf{max}\left(0.0, \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right)\right) \cdot alphax\right) \cdot alphax + \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right)\right) \cdot alphay\right) \cdot alphay\right)}\]

Error

Bits error versus wx

Bits error versus sinTheta

Bits error versus alphax

Bits error versus wy

Bits error versus alphay

Derivation

  1. Initial program 32.1

    \[\sqrt{\mathsf{max}\left(0.0, \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right)\right) \cdot alphax\right) \cdot alphax + \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right)\right) \cdot alphay\right) \cdot alphay\right)}\]
  2. Final simplification32.1

    \[\leadsto \sqrt{\mathsf{max}\left(0.0, \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wx}{sinTheta}, -1\right), 1\right)\right) \cdot alphax\right) \cdot alphax + \left(\left(\mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right) \cdot \mathsf{min}\left(\mathsf{max}\left(\frac{wy}{sinTheta}, -1\right), 1\right)\right) \cdot alphay\right) \cdot alphay\right)}\]

Reproduce

herbie shell --seed 2020152 
(FPCore (wx sinTheta alphax wy alphay)
  :name "(sqrt (fmax 0 (+ (* (* (* (fmin (fmax (/ wx sinTheta) (- 1)) 1) (fmin (fmax (/ wx sinTheta) (- 1)) 1)) alphax) alphax) (* (* (* (fmin (fmax (/ wy sinTheta) (- 1)) 1) (fmin (fmax (/ wy sinTheta) (- 1)) 1)) alphay) alphay))))"
  :precision binary64
  (sqrt (fmax 0.0 (+ (* (* (* (fmin (fmax (/ wx sinTheta) (neg 1.0)) 1.0) (fmin (fmax (/ wx sinTheta) (neg 1.0)) 1.0)) alphax) alphax) (* (* (* (fmin (fmax (/ wy sinTheta) (neg 1.0)) 1.0) (fmin (fmax (/ wy sinTheta) (neg 1.0)) 1.0)) alphay) alphay)))))