Average Error: 6.0 → 0.6
Time: 25.7s
Precision: 64
\[x - \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;y \cdot \left(z - t\right) = -\infty:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\ \mathbf{elif}\;y \cdot \left(z - t\right) \le 1.99823853113780918 \cdot 10^{149}:\\ \;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{t - z}{a}, y, x\right)\\ \end{array}\]
x - \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r202053 = x;
        double r202054 = y;
        double r202055 = z;
        double r202056 = t;
        double r202057 = r202055 - r202056;
        double r202058 = r202054 * r202057;
        double r202059 = a;
        double r202060 = r202058 / r202059;
        double r202061 = r202053 - r202060;
        return r202061;
}

double f(double x, double y, double z, double t, double a) {
        double r202062 = y;
        double r202063 = z;
        double r202064 = t;
        double r202065 = r202063 - r202064;
        double r202066 = r202062 * r202065;
        double r202067 = -inf.0;
        bool r202068 = r202066 <= r202067;
        double r202069 = a;
        double r202070 = r202062 / r202069;
        double r202071 = r202064 - r202063;
        double r202072 = x;
        double r202073 = fma(r202070, r202071, r202072);
        double r202074 = 1.9982385311378092e+149;
        bool r202075 = r202066 <= r202074;
        double r202076 = r202066 / r202069;
        double r202077 = r202072 - r202076;
        double r202078 = r202071 / r202069;
        double r202079 = fma(r202078, r202062, r202072);
        double r202080 = r202075 ? r202077 : r202079;
        double r202081 = r202068 ? r202073 : r202080;
        return r202081;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original6.0
Target0.6
Herbie0.6
\[\begin{array}{l} \mathbf{if}\;y \lt -1.07612662163899753 \cdot 10^{-10}:\\ \;\;\;\;x - \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.8944268627920891 \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. Simplified0.2

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

    if -inf.0 < (* y (- z t)) < 1.9982385311378092e+149

    1. Initial program 0.3

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

    if 1.9982385311378092e+149 < (* y (- z t))

    1. Initial program 21.1

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)}\]
    3. Using strategy rm
    4. Applied fma-udef1.6

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

      \[\leadsto \color{blue}{\frac{t - z}{\frac{a}{y}}} + x\]
    6. Using strategy rm
    7. Applied *-un-lft-identity1.5

      \[\leadsto \frac{t - z}{\frac{a}{y}} + \color{blue}{1 \cdot x}\]
    8. Applied *-un-lft-identity1.5

      \[\leadsto \color{blue}{1 \cdot \frac{t - z}{\frac{a}{y}}} + 1 \cdot x\]
    9. Applied distribute-lft-out1.5

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

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

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

Reproduce

herbie shell --seed 2019199 +o rules:numerics
(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.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)))