Average Error: 6.3 → 0.6
Time: 14.6s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;a \le -139497726155533.078125 \lor \neg \left(a \le 2.135075560870679849452969788908829329444 \cdot 10^{-7}\right):\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;a \le -139497726155533.078125 \lor \neg \left(a \le 2.135075560870679849452969788908829329444 \cdot 10^{-7}\right):\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\

\mathbf{else}:\\
\;\;\;\;x + \left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r231299 = x;
        double r231300 = y;
        double r231301 = z;
        double r231302 = t;
        double r231303 = r231301 - r231302;
        double r231304 = r231300 * r231303;
        double r231305 = a;
        double r231306 = r231304 / r231305;
        double r231307 = r231299 + r231306;
        return r231307;
}

double f(double x, double y, double z, double t, double a) {
        double r231308 = a;
        double r231309 = -139497726155533.08;
        bool r231310 = r231308 <= r231309;
        double r231311 = 2.1350755608706798e-07;
        bool r231312 = r231308 <= r231311;
        double r231313 = !r231312;
        bool r231314 = r231310 || r231313;
        double r231315 = x;
        double r231316 = y;
        double r231317 = z;
        double r231318 = t;
        double r231319 = r231317 - r231318;
        double r231320 = r231308 / r231319;
        double r231321 = r231316 / r231320;
        double r231322 = r231315 + r231321;
        double r231323 = r231317 * r231316;
        double r231324 = r231323 / r231308;
        double r231325 = r231318 * r231316;
        double r231326 = r231325 / r231308;
        double r231327 = r231324 - r231326;
        double r231328 = r231315 + r231327;
        double r231329 = r231314 ? r231322 : r231328;
        return r231329;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original6.3
Target0.7
Herbie0.6
\[\begin{array}{l} \mathbf{if}\;y \lt -1.07612662163899753216593153715602325729 \cdot 10^{-10}:\\ \;\;\;\;x + \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.894426862792089097262541964056085749132 \cdot 10^{-49}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -139497726155533.08 or 2.1350755608706798e-07 < a

    1. Initial program 9.9

      \[x + \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied associate-/l*0.4

      \[\leadsto x + \color{blue}{\frac{y}{\frac{a}{z - t}}}\]

    if -139497726155533.08 < a < 2.1350755608706798e-07

    1. Initial program 0.8

      \[x + \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied clear-num0.9

      \[\leadsto x + \color{blue}{\frac{1}{\frac{a}{y \cdot \left(z - t\right)}}}\]
    4. Using strategy rm
    5. Applied associate-/r*3.1

      \[\leadsto x + \frac{1}{\color{blue}{\frac{\frac{a}{y}}{z - t}}}\]
    6. Taylor expanded around 0 0.8

      \[\leadsto x + \color{blue}{\left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -139497726155533.078125 \lor \neg \left(a \le 2.135075560870679849452969788908829329444 \cdot 10^{-7}\right):\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019212 
(FPCore (x y z t a)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
  :precision binary64

  :herbie-target
  (if (< y -1.07612662163899753e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.8944268627920891e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))

  (+ x (/ (* y (- z t)) a)))