Average Error: 5.6 → 1.5
Time: 17.1s
Precision: 64
\[x - \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;x - \frac{y \cdot \left(z - t\right)}{a} = -\infty:\\ \;\;\;\;x - \frac{y}{a} \cdot \left(z - t\right)\\ \mathbf{elif}\;x - \frac{y \cdot \left(z - t\right)}{a} \le 9.136892539129485 \cdot 10^{-243}:\\ \;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{y}{a} \cdot \left(z - t\right)\\ \end{array}\]
x - \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;x - \frac{y \cdot \left(z - t\right)}{a} = -\infty:\\
\;\;\;\;x - \frac{y}{a} \cdot \left(z - t\right)\\

\mathbf{elif}\;x - \frac{y \cdot \left(z - t\right)}{a} \le 9.136892539129485 \cdot 10^{-243}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r15895440 = x;
        double r15895441 = y;
        double r15895442 = z;
        double r15895443 = t;
        double r15895444 = r15895442 - r15895443;
        double r15895445 = r15895441 * r15895444;
        double r15895446 = a;
        double r15895447 = r15895445 / r15895446;
        double r15895448 = r15895440 - r15895447;
        return r15895448;
}

double f(double x, double y, double z, double t, double a) {
        double r15895449 = x;
        double r15895450 = y;
        double r15895451 = z;
        double r15895452 = t;
        double r15895453 = r15895451 - r15895452;
        double r15895454 = r15895450 * r15895453;
        double r15895455 = a;
        double r15895456 = r15895454 / r15895455;
        double r15895457 = r15895449 - r15895456;
        double r15895458 = -inf.0;
        bool r15895459 = r15895457 <= r15895458;
        double r15895460 = r15895450 / r15895455;
        double r15895461 = r15895460 * r15895453;
        double r15895462 = r15895449 - r15895461;
        double r15895463 = 9.136892539129485e-243;
        bool r15895464 = r15895457 <= r15895463;
        double r15895465 = r15895464 ? r15895457 : r15895462;
        double r15895466 = r15895459 ? r15895462 : r15895465;
        return r15895466;
}

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

Original5.6
Target0.7
Herbie1.5
\[\begin{array}{l} \mathbf{if}\;y \lt -1.0761266216389975 \cdot 10^{-10}:\\ \;\;\;\;x - \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.894426862792089 \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 (- x (/ (* y (- z t)) a)) < -inf.0 or 9.136892539129485e-243 < (- x (/ (* y (- z t)) a))

    1. Initial program 10.1

      \[x - \frac{y \cdot \left(z - t\right)}{a}\]
    2. Taylor expanded around 0 10.2

      \[\leadsto x - \color{blue}{\left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)}\]
    3. Simplified2.5

      \[\leadsto x - \color{blue}{\frac{y}{a} \cdot \left(z - t\right)}\]

    if -inf.0 < (- x (/ (* y (- z t)) a)) < 9.136892539129485e-243

    1. Initial program 0.5

      \[x - \frac{y \cdot \left(z - t\right)}{a}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;x - \frac{y \cdot \left(z - t\right)}{a} = -\infty:\\ \;\;\;\;x - \frac{y}{a} \cdot \left(z - t\right)\\ \mathbf{elif}\;x - \frac{y \cdot \left(z - t\right)}{a} \le 9.136892539129485 \cdot 10^{-243}:\\ \;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{y}{a} \cdot \left(z - t\right)\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< y -1.0761266216389975e-10) (- x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))

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