Average Error: 20.4 → 18.3
Time: 5.0s
Precision: binary64
\[\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right)\]
\[\begin{array}{l} \mathbf{if}\;\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right) \le 0.0:\\ \;\;\;\;\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(dt \cdot \left(1 + k\right)\right) \cdot \left(3 - dt \cdot \left(1 + k\right)\right) + \left(e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right) - 4\right)\\ \end{array}\]

Error

Bits error versus dt

Bits error versus k

Derivation

  1. Split input into 2 regimes
  2. if (+ (- (+ (neg 4.0) (* (* 3.0 dt) (+ 1.0 k))) (* (* (* dt dt) (+ 1.0 k)) (+ 1.0 k))) (* (exp (* (neg dt) (+ 1.0 k))) (+ 4.0 (* dt (+ 1.0 k))))) < 0.0

    1. Initial program 18.4

      \[\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right)\]

    if 0.0 < (+ (- (+ (neg 4.0) (* (* 3.0 dt) (+ 1.0 k))) (* (* (* dt dt) (+ 1.0 k)) (+ 1.0 k))) (* (exp (* (neg dt) (+ 1.0 k))) (+ 4.0 (* dt (+ 1.0 k)))))

    1. Initial program 57.2

      \[\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right)\]
    2. Simplified16.4

      \[\leadsto \color{blue}{\left(dt \cdot \left(1 + k\right)\right) \cdot \left(3 - dt \cdot \left(1 + k\right)\right) + \left(e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right) - 4\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification18.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right) \le 0.0:\\ \;\;\;\;\left(\left(\left(-4\right) + \left(3 \cdot dt\right) \cdot \left(1 + k\right)\right) - \left(\left(dt \cdot dt\right) \cdot \left(1 + k\right)\right) \cdot \left(1 + k\right)\right) + e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(dt \cdot \left(1 + k\right)\right) \cdot \left(3 - dt \cdot \left(1 + k\right)\right) + \left(e^{\left(-dt\right) \cdot \left(1 + k\right)} \cdot \left(4 + dt \cdot \left(1 + k\right)\right) - 4\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020153 
(FPCore (dt k)
  :name "(+ (- (+ (- 4) (* (* 3 dt) (+ 1 k))) (* (* (* dt dt) (+ 1 k)) (+ 1 k))) (* (exp (* (- dt) (+ 1 k))) (+ 4 (* dt (+ 1 k)))))"
  :precision binary64
  (+ (- (+ (neg 4.0) (* (* 3.0 dt) (+ 1.0 k))) (* (* (* dt dt) (+ 1.0 k)) (+ 1.0 k))) (* (exp (* (neg dt) (+ 1.0 k))) (+ 4.0 (* dt (+ 1.0 k))))))