Average Error: 0.3 → 0.3
Time: 3.0s
Precision: binary64
\[\left(\left(p0 + \left(3 \cdot \left(\left(-p0\right) + p1\right)\right) \cdot t\right) + \left(\left(3 \cdot \left(\left(p0 - 2 \cdot p1\right) + p2\right)\right) \cdot t\right) \cdot t\right) + \left(\left(\left(\left(\left(\left(-p0\right) + 3 \cdot p1\right) - 3 \cdot p2\right) + p3\right) \cdot t\right) \cdot t\right) \cdot t\]
\[\left(\left(p0 + \left(3 \cdot \left(\left(-p0\right) + p1\right)\right) \cdot t\right) + \left(\left(3 \cdot \left(\left(p0 - 2 \cdot p1\right) + p2\right)\right) \cdot t\right) \cdot t\right) + \left(\left(\left(\left(\left(\left(-p0\right) + 3 \cdot p1\right) - 3 \cdot p2\right) + p3\right) \cdot t\right) \cdot t\right) \cdot t\]

Error

Bits error versus p0

Bits error versus p1

Bits error versus t

Bits error versus p2

Bits error versus p3

Derivation

  1. Initial program 0.3

    \[\left(\left(p0 + \left(3 \cdot \left(\left(-p0\right) + p1\right)\right) \cdot t\right) + \left(\left(3 \cdot \left(\left(p0 - 2 \cdot p1\right) + p2\right)\right) \cdot t\right) \cdot t\right) + \left(\left(\left(\left(\left(\left(-p0\right) + 3 \cdot p1\right) - 3 \cdot p2\right) + p3\right) \cdot t\right) \cdot t\right) \cdot t\]
  2. Final simplification0.3

    \[\leadsto \left(\left(p0 + \left(3 \cdot \left(\left(-p0\right) + p1\right)\right) \cdot t\right) + \left(\left(3 \cdot \left(\left(p0 - 2 \cdot p1\right) + p2\right)\right) \cdot t\right) \cdot t\right) + \left(\left(\left(\left(\left(\left(-p0\right) + 3 \cdot p1\right) - 3 \cdot p2\right) + p3\right) \cdot t\right) \cdot t\right) \cdot t\]

Reproduce

herbie shell --seed 2020153 
(FPCore (p0 p1 t p2 p3)
  :name "(+ (+ (+ p0 (* (* 3 (+ (- p0) p1)) t)) (* (* (* 3 (+ (- p0 (* 2 p1)) p2)) t) t)) (* (* (* (+ (- (+ (- p0) (* 3 p1)) (* 3 p2)) p3) t) t) t))"
  :precision binary64
  (+ (+ (+ p0 (* (* 3.0 (+ (neg p0) p1)) t)) (* (* (* 3.0 (+ (- p0 (* 2.0 p1)) p2)) t) t)) (* (* (* (+ (- (+ (neg p0) (* 3.0 p1)) (* 3.0 p2)) p3) t) t) t)))