\[(x * y + z)_* - \left(1 + \left(x \cdot y + z\right)\right)\]
Test:
simple fma test
Bits:
128 bits
Bits error versus x
Bits error versus y
Bits error versus z
Time: 9.2 s
Input Error: 44.9
Output Error: 45.3
Log:
Profile: 🕒
\((x * y + z)_* - \left(1 + \left({\left(x \cdot y\right)}^2 - {z}^2\right) \cdot \frac{1}{x \cdot y - z}\right)\)
  1. Started with
    \[(x * y + z)_* - \left(1 + \left(x \cdot y + z\right)\right)\]
    44.9
  2. Using strategy rm
    44.9
  3. Applied flip-+ to get
    \[(x * y + z)_* - \left(1 + \color{red}{\left(x \cdot y + z\right)}\right) \leadsto (x * y + z)_* - \left(1 + \color{blue}{\frac{{\left(x \cdot y\right)}^2 - {z}^2}{x \cdot y - z}}\right)\]
    45.2
  4. Using strategy rm
    45.2
  5. Applied div-inv to get
    \[(x * y + z)_* - \left(1 + \color{red}{\frac{{\left(x \cdot y\right)}^2 - {z}^2}{x \cdot y - z}}\right) \leadsto (x * y + z)_* - \left(1 + \color{blue}{\left({\left(x \cdot y\right)}^2 - {z}^2\right) \cdot \frac{1}{x \cdot y - z}}\right)\]
    45.3

  6. Removed slow pow expressions

Original test:


(lambda ((x default) (y default) (z default))
  #:name "simple fma test"
  (- (fma x y z) (+ 1 (+ (* x y) z)))
  #:target
  -1)