\[\left(d1 \cdot 3 + d1 \cdot d2\right) + d1 \cdot d3\]
Test:
FastMath test3
Bits:
128 bits
Bits error versus d1
Bits error versus d2
Bits error versus d3
Time: 4.4 s
Input Error: 0.1
Output Error: 0.1
Log:
Profile: 🕒
\((d1 * \left(d2 + 3\right) + \left(d3 \cdot d1\right))_*\)
  1. Started with
    \[\left(d1 \cdot 3 + d1 \cdot d2\right) + d1 \cdot d3\]
    0.1
  2. Applied simplify to get
    \[\color{red}{\left(d1 \cdot 3 + d1 \cdot d2\right) + d1 \cdot d3} \leadsto \color{blue}{(d1 * \left(d3 + 3\right) + \left(d1 \cdot d2\right))_*}\]
    0.1
  3. Using strategy rm
    0.1
  4. Applied fma-udef to get
    \[\color{red}{(d1 * \left(d3 + 3\right) + \left(d1 \cdot d2\right))_*} \leadsto \color{blue}{d1 \cdot \left(d3 + 3\right) + d1 \cdot d2}\]
    0.1
  5. Using strategy rm
    0.1
  6. Applied distribute-lft-out to get
    \[\color{red}{d1 \cdot \left(d3 + 3\right) + d1 \cdot d2} \leadsto \color{blue}{d1 \cdot \left(\left(d3 + 3\right) + d2\right)}\]
    0.1
  7. Using strategy rm
    0.1
  8. Applied flip-+ to get
    \[d1 \cdot \color{red}{\left(\left(d3 + 3\right) + d2\right)} \leadsto d1 \cdot \color{blue}{\frac{{\left(d3 + 3\right)}^2 - {d2}^2}{\left(d3 + 3\right) - d2}}\]
    10.0
  9. Applied associate-*r/ to get
    \[\color{red}{d1 \cdot \frac{{\left(d3 + 3\right)}^2 - {d2}^2}{\left(d3 + 3\right) - d2}} \leadsto \color{blue}{\frac{d1 \cdot \left({\left(d3 + 3\right)}^2 - {d2}^2\right)}{\left(d3 + 3\right) - d2}}\]
    11.8
  10. Applied taylor to get
    \[\frac{d1 \cdot \left({\left(d3 + 3\right)}^2 - {d2}^2\right)}{\left(d3 + 3\right) - d2} \leadsto d1 \cdot d3 + \left(3 \cdot d1 + d1 \cdot d2\right)\]
    0.1
  11. Taylor expanded around 0 to get
    \[\color{red}{d1 \cdot d3 + \left(3 \cdot d1 + d1 \cdot d2\right)} \leadsto \color{blue}{d1 \cdot d3 + \left(3 \cdot d1 + d1 \cdot d2\right)}\]
    0.1
  12. Applied simplify to get
    \[d1 \cdot d3 + \left(3 \cdot d1 + d1 \cdot d2\right) \leadsto (d1 * \left(d2 + 3\right) + \left(d3 \cdot d1\right))_*\]
    0.1

  13. Applied final simplification

Original test:


(lambda ((d1 default) (d2 default) (d3 default))
  #:name "FastMath test3"
  (+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
  #:target
  (* d1 (+ (+ 3 d2) d3)))