\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;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.4 |
|---|---|
| Target | 5.7 |
| Herbie | 5.0 |
if (* x y) < -1.9533419278449132e+114 or -2.2710917087950838e-78 < (* x y) < -0.0Initial program 9.1
Simplified9.1
rmApplied div-inv9.1
Taylor expanded around 0 9.1
Simplified5.6
rmApplied associate-/r/5.8
Applied associate-/r/5.8
Applied prod-diff5.8
Simplified5.8
if -1.9533419278449132e+114 < (* x y) < -2.2710917087950838e-78 or -0.0 < (* x y) < 7.652734452730781e-61 or 18700.668578066157 < (* x y) < 1.8303762600078445e+124Initial program 3.8
Simplified3.8
if 7.652734452730781e-61 < (* x y) < 18700.668578066157Initial program 4.3
Simplified4.3
Taylor expanded around 0 4.3
Simplified14.7
if 1.8303762600078445e+124 < (* x y) Initial program 20.5
Simplified20.5
rmApplied div-inv20.6
Taylor expanded around 0 20.5
Simplified3.5
rmApplied clear-num3.6
Final simplification5.0
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))