Average Error: 5.6 → 0.7
Time: 11.3s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;y \le -2.0994806737492123 \cdot 10^{-51}:\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{elif}\;y \le 1.156346486413499 \cdot 10^{-34}:\\ \;\;\;\;x + \frac{y \cdot \left(-t\right) + z \cdot y}{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 \le -2.0994806737492123 \cdot 10^{-51}:\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\

\mathbf{elif}\;y \le 1.156346486413499 \cdot 10^{-34}:\\
\;\;\;\;x + \frac{y \cdot \left(-t\right) + z \cdot y}{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 r6406169 = x;
        double r6406170 = y;
        double r6406171 = z;
        double r6406172 = t;
        double r6406173 = r6406171 - r6406172;
        double r6406174 = r6406170 * r6406173;
        double r6406175 = a;
        double r6406176 = r6406174 / r6406175;
        double r6406177 = r6406169 + r6406176;
        return r6406177;
}

double f(double x, double y, double z, double t, double a) {
        double r6406178 = y;
        double r6406179 = -2.0994806737492123e-51;
        bool r6406180 = r6406178 <= r6406179;
        double r6406181 = x;
        double r6406182 = a;
        double r6406183 = z;
        double r6406184 = t;
        double r6406185 = r6406183 - r6406184;
        double r6406186 = r6406182 / r6406185;
        double r6406187 = r6406178 / r6406186;
        double r6406188 = r6406181 + r6406187;
        double r6406189 = 1.156346486413499e-34;
        bool r6406190 = r6406178 <= r6406189;
        double r6406191 = -r6406184;
        double r6406192 = r6406178 * r6406191;
        double r6406193 = r6406183 * r6406178;
        double r6406194 = r6406192 + r6406193;
        double r6406195 = r6406194 / r6406182;
        double r6406196 = r6406181 + r6406195;
        double r6406197 = r6406190 ? r6406196 : r6406188;
        double r6406198 = r6406180 ? r6406188 : r6406197;
        return r6406198;
}

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.6
Herbie0.7
\[\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 y < -2.0994806737492123e-51 or 1.156346486413499e-34 < y

    1. Initial program 11.7

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

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

    if -2.0994806737492123e-51 < y < 1.156346486413499e-34

    1. Initial program 0.4

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

      \[\leadsto x + \frac{y \cdot \color{blue}{\left(z + \left(-t\right)\right)}}{a}\]
    4. Applied distribute-lft-in0.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -2.0994806737492123 \cdot 10^{-51}:\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{elif}\;y \le 1.156346486413499 \cdot 10^{-34}:\\ \;\;\;\;x + \frac{y \cdot \left(-t\right) + z \cdot y}{a}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019156 
(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 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))

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