Average Error: 6.2 → 0.8
Time: 11.3s
Precision: 64
\[x - \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;y \cdot \left(z - t\right) = -\infty:\\ \;\;\;\;x - \frac{z - t}{a} \cdot y\\ \mathbf{elif}\;y \cdot \left(z - t\right) \le 4.64802617685348964928186579755036053059 \cdot 10^{122}:\\ \;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{y}{\frac{a}{z - t}}\\ \end{array}\]
x - \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) = -\infty:\\
\;\;\;\;x - \frac{z - t}{a} \cdot y\\

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

\mathbf{else}:\\
\;\;\;\;x - \frac{y}{\frac{a}{z - t}}\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r239614 = x;
        double r239615 = y;
        double r239616 = z;
        double r239617 = t;
        double r239618 = r239616 - r239617;
        double r239619 = r239615 * r239618;
        double r239620 = a;
        double r239621 = r239619 / r239620;
        double r239622 = r239614 - r239621;
        return r239622;
}

double f(double x, double y, double z, double t, double a) {
        double r239623 = y;
        double r239624 = z;
        double r239625 = t;
        double r239626 = r239624 - r239625;
        double r239627 = r239623 * r239626;
        double r239628 = -inf.0;
        bool r239629 = r239627 <= r239628;
        double r239630 = x;
        double r239631 = a;
        double r239632 = r239626 / r239631;
        double r239633 = r239632 * r239623;
        double r239634 = r239630 - r239633;
        double r239635 = 4.64802617685349e+122;
        bool r239636 = r239627 <= r239635;
        double r239637 = r239627 / r239631;
        double r239638 = r239630 - r239637;
        double r239639 = r239631 / r239626;
        double r239640 = r239623 / r239639;
        double r239641 = r239630 - r239640;
        double r239642 = r239636 ? r239638 : r239641;
        double r239643 = r239629 ? r239634 : r239642;
        return r239643;
}

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.2
Target0.7
Herbie0.8
\[\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 3 regimes
  2. if (* y (- z t)) < -inf.0

    1. Initial program 64.0

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

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

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

    if -inf.0 < (* y (- z t)) < 4.64802617685349e+122

    1. Initial program 0.5

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

    if 4.64802617685349e+122 < (* y (- z t))

    1. Initial program 18.7

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

      \[\leadsto x - \color{blue}{\frac{y}{\frac{a}{z - t}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.8

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

Reproduce

herbie shell --seed 2019208 
(FPCore (x y z t a)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
  :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)))