Average Error: 7.4 → 5.0
Time: 32.2s
Precision: 64
\[\frac{x \cdot y - z \cdot t}{a}\]
\[\begin{array}{l} \mathbf{if}\;x \cdot y \le -1.95334192784491323365458960337263970377 \cdot 10^{114}:\\ \;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\ \mathbf{elif}\;x \cdot y \le -2.271091708795083758233986084719898174504 \cdot 10^{-78}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{elif}\;x \cdot y \le -0.0:\\ \;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\ \mathbf{elif}\;x \cdot y \le 7.65273445273078107340344646626747751228 \cdot 10^{-61}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{elif}\;x \cdot y \le 18700.66857806615735171362757682800292969:\\ \;\;\;\;\mathsf{fma}\left(\frac{-t}{a}, z, y \cdot \frac{x}{a}\right)\\ \mathbf{elif}\;x \cdot y \le 1.830376260007844535183465798927555080865 \cdot 10^{124}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\frac{a}{x}}{y}} - \frac{z}{\frac{a}{t}}\\ \end{array}\]
\frac{x \cdot y - z \cdot t}{a}
\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.95334192784491323365458960337263970377 \cdot 10^{114}:\\
\;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\

\mathbf{elif}\;x \cdot y \le -2.271091708795083758233986084719898174504 \cdot 10^{-78}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\

\mathbf{elif}\;x \cdot y \le -0.0:\\
\;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\

\mathbf{elif}\;x \cdot y \le 7.65273445273078107340344646626747751228 \cdot 10^{-61}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\

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

\mathbf{elif}\;x \cdot y \le 1.830376260007844535183465798927555080865 \cdot 10^{124}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r914125 = x;
        double r914126 = y;
        double r914127 = r914125 * r914126;
        double r914128 = z;
        double r914129 = t;
        double r914130 = r914128 * r914129;
        double r914131 = r914127 - r914130;
        double r914132 = a;
        double r914133 = r914131 / r914132;
        return r914133;
}

double f(double x, double y, double z, double t, double a) {
        double r914134 = x;
        double r914135 = y;
        double r914136 = r914134 * r914135;
        double r914137 = -1.9533419278449132e+114;
        bool r914138 = r914136 <= r914137;
        double r914139 = t;
        double r914140 = -r914139;
        double r914141 = z;
        double r914142 = a;
        double r914143 = r914141 / r914142;
        double r914144 = r914139 * r914143;
        double r914145 = fma(r914140, r914143, r914144);
        double r914146 = r914135 / r914142;
        double r914147 = r914140 * r914143;
        double r914148 = fma(r914146, r914134, r914147);
        double r914149 = r914145 + r914148;
        double r914150 = -2.2710917087950838e-78;
        bool r914151 = r914136 <= r914150;
        double r914152 = fma(r914140, r914141, r914136);
        double r914153 = r914152 / r914142;
        double r914154 = -0.0;
        bool r914155 = r914136 <= r914154;
        double r914156 = 7.652734452730781e-61;
        bool r914157 = r914136 <= r914156;
        double r914158 = 18700.668578066157;
        bool r914159 = r914136 <= r914158;
        double r914160 = r914140 / r914142;
        double r914161 = r914134 / r914142;
        double r914162 = r914135 * r914161;
        double r914163 = fma(r914160, r914141, r914162);
        double r914164 = 1.8303762600078445e+124;
        bool r914165 = r914136 <= r914164;
        double r914166 = 1.0;
        double r914167 = r914142 / r914134;
        double r914168 = r914167 / r914135;
        double r914169 = r914166 / r914168;
        double r914170 = r914142 / r914139;
        double r914171 = r914141 / r914170;
        double r914172 = r914169 - r914171;
        double r914173 = r914165 ? r914153 : r914172;
        double r914174 = r914159 ? r914163 : r914173;
        double r914175 = r914157 ? r914153 : r914174;
        double r914176 = r914155 ? r914149 : r914175;
        double r914177 = r914151 ? r914153 : r914176;
        double r914178 = r914138 ? r914149 : r914177;
        return r914178;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original7.4
Target5.7
Herbie5.0
\[\begin{array}{l} \mathbf{if}\;z \lt -2.468684968699548224247694913169778644284 \cdot 10^{170}:\\ \;\;\;\;\frac{y}{a} \cdot x - \frac{t}{a} \cdot z\\ \mathbf{elif}\;z \lt 6.309831121978371209578784129518242708809 \cdot 10^{-71}:\\ \;\;\;\;\frac{x \cdot y - z \cdot t}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{a} \cdot x - \frac{t}{a} \cdot z\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if (* x y) < -1.9533419278449132e+114 or -2.2710917087950838e-78 < (* x y) < -0.0

    1. Initial program 9.1

      \[\frac{x \cdot y - z \cdot t}{a}\]
    2. Simplified9.1

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(-t, z, x \cdot y\right) \cdot \frac{1}{a}}\]
    5. Taylor expanded around 0 9.1

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

      \[\leadsto \color{blue}{\frac{y}{\frac{a}{x}} - \frac{z}{\frac{a}{t}}}\]
    7. Using strategy rm
    8. Applied associate-/r/5.8

      \[\leadsto \frac{y}{\frac{a}{x}} - \color{blue}{\frac{z}{a} \cdot t}\]
    9. Applied associate-/r/5.8

      \[\leadsto \color{blue}{\frac{y}{a} \cdot x} - \frac{z}{a} \cdot t\]
    10. Applied prod-diff5.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{a}, x, -t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right)}\]
    11. Simplified5.8

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

    if -1.9533419278449132e+114 < (* x y) < -2.2710917087950838e-78 or -0.0 < (* x y) < 7.652734452730781e-61 or 18700.668578066157 < (* x y) < 1.8303762600078445e+124

    1. Initial program 3.8

      \[\frac{x \cdot y - z \cdot t}{a}\]
    2. Simplified3.8

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

    if 7.652734452730781e-61 < (* x y) < 18700.668578066157

    1. Initial program 4.3

      \[\frac{x \cdot y - z \cdot t}{a}\]
    2. Simplified4.3

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}}\]
    3. Taylor expanded around 0 4.3

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

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

    if 1.8303762600078445e+124 < (* x y)

    1. Initial program 20.5

      \[\frac{x \cdot y - z \cdot t}{a}\]
    2. Simplified20.5

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(-t, z, x \cdot y\right) \cdot \frac{1}{a}}\]
    5. Taylor expanded around 0 20.5

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

      \[\leadsto \color{blue}{\frac{y}{\frac{a}{x}} - \frac{z}{\frac{a}{t}}}\]
    7. Using strategy rm
    8. Applied clear-num3.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \cdot y \le -1.95334192784491323365458960337263970377 \cdot 10^{114}:\\ \;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\ \mathbf{elif}\;x \cdot y \le -2.271091708795083758233986084719898174504 \cdot 10^{-78}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{elif}\;x \cdot y \le -0.0:\\ \;\;\;\;\mathsf{fma}\left(-t, \frac{z}{a}, t \cdot \frac{z}{a}\right) + \mathsf{fma}\left(\frac{y}{a}, x, \left(-t\right) \cdot \frac{z}{a}\right)\\ \mathbf{elif}\;x \cdot y \le 7.65273445273078107340344646626747751228 \cdot 10^{-61}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{elif}\;x \cdot y \le 18700.66857806615735171362757682800292969:\\ \;\;\;\;\mathsf{fma}\left(\frac{-t}{a}, z, y \cdot \frac{x}{a}\right)\\ \mathbf{elif}\;x \cdot y \le 1.830376260007844535183465798927555080865 \cdot 10^{124}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-t, z, x \cdot y\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\frac{a}{x}}{y}} - \frac{z}{\frac{a}{t}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z t a)
  :name "Data.Colour.Matrix:inverse from colour-2.3.3, B"

  :herbie-target
  (if (< z -2.468684968699548e+170) (- (* (/ y a) x) (* (/ t a) z)) (if (< z 6.309831121978371e-71) (/ (- (* x y) (* z t)) a) (- (* (/ y a) x) (* (/ t a) z))))

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