Average Error: 5.9 → 1.0
Time: 1.1m
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;\left(z - t\right) \cdot y \le -2.77891878136361100181454115634670852188 \cdot 10^{145}:\\ \;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\ \mathbf{elif}\;\left(z - t\right) \cdot y \le 2.770472112777995570095000450343623150183 \cdot 10^{157}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(z - t\right) \cdot y}} + x\\ \mathbf{else}:\\ \;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;\left(z - t\right) \cdot y \le -2.77891878136361100181454115634670852188 \cdot 10^{145}:\\
\;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\

\mathbf{elif}\;\left(z - t\right) \cdot y \le 2.770472112777995570095000450343623150183 \cdot 10^{157}:\\
\;\;\;\;\frac{1}{\frac{a}{\left(z - t\right) \cdot y}} + x\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r14736751 = x;
        double r14736752 = y;
        double r14736753 = z;
        double r14736754 = t;
        double r14736755 = r14736753 - r14736754;
        double r14736756 = r14736752 * r14736755;
        double r14736757 = a;
        double r14736758 = r14736756 / r14736757;
        double r14736759 = r14736751 + r14736758;
        return r14736759;
}

double f(double x, double y, double z, double t, double a) {
        double r14736760 = z;
        double r14736761 = t;
        double r14736762 = r14736760 - r14736761;
        double r14736763 = y;
        double r14736764 = r14736762 * r14736763;
        double r14736765 = -2.778918781363611e+145;
        bool r14736766 = r14736764 <= r14736765;
        double r14736767 = x;
        double r14736768 = a;
        double r14736769 = r14736760 / r14736768;
        double r14736770 = r14736761 / r14736768;
        double r14736771 = r14736769 - r14736770;
        double r14736772 = r14736771 * r14736763;
        double r14736773 = r14736767 + r14736772;
        double r14736774 = 2.7704721127779956e+157;
        bool r14736775 = r14736764 <= r14736774;
        double r14736776 = 1.0;
        double r14736777 = r14736768 / r14736764;
        double r14736778 = r14736776 / r14736777;
        double r14736779 = r14736778 + r14736767;
        double r14736780 = r14736775 ? r14736779 : r14736773;
        double r14736781 = r14736766 ? r14736773 : r14736780;
        return r14736781;
}

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.9
Target0.8
Herbie1.0
\[\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 (* y (- z t)) < -2.778918781363611e+145 or 2.7704721127779956e+157 < (* y (- z t))

    1. Initial program 20.3

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

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

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

    if -2.778918781363611e+145 < (* y (- z t)) < 2.7704721127779956e+157

    1. Initial program 0.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(z - t\right) \cdot y \le -2.77891878136361100181454115634670852188 \cdot 10^{145}:\\ \;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\ \mathbf{elif}\;\left(z - t\right) \cdot y \le 2.770472112777995570095000450343623150183 \cdot 10^{157}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(z - t\right) \cdot y}} + x\\ \mathbf{else}:\\ \;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t a)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"

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

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