x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -2.2785256636554884 \cdot 10^{-145}:\\
\;\;\;\;x + \left(\frac{y}{\frac{a}{z - t} - \frac{t}{z - t}} - \left(\sqrt[3]{\frac{x}{\frac{a}{z - t} - \frac{t}{z - t}}} \cdot \sqrt[3]{\frac{x}{\frac{a}{z - t} - \frac{t}{z - t}}}\right) \cdot \sqrt[3]{\frac{x}{\frac{a}{z - t} - \frac{t}{z - t}}}\right)\\
\mathbf{elif}\;a \le 2.88288138974080523 \cdot 10^{-216}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r643169 = x;
double r643170 = y;
double r643171 = r643170 - r643169;
double r643172 = z;
double r643173 = t;
double r643174 = r643172 - r643173;
double r643175 = r643171 * r643174;
double r643176 = a;
double r643177 = r643176 - r643173;
double r643178 = r643175 / r643177;
double r643179 = r643169 + r643178;
return r643179;
}
double f(double x, double y, double z, double t, double a) {
double r643180 = a;
double r643181 = -2.2785256636554884e-145;
bool r643182 = r643180 <= r643181;
double r643183 = x;
double r643184 = y;
double r643185 = z;
double r643186 = t;
double r643187 = r643185 - r643186;
double r643188 = r643180 / r643187;
double r643189 = r643186 / r643187;
double r643190 = r643188 - r643189;
double r643191 = r643184 / r643190;
double r643192 = r643183 / r643190;
double r643193 = cbrt(r643192);
double r643194 = r643193 * r643193;
double r643195 = r643194 * r643193;
double r643196 = r643191 - r643195;
double r643197 = r643183 + r643196;
double r643198 = 2.8828813897408052e-216;
bool r643199 = r643180 <= r643198;
double r643200 = r643183 * r643185;
double r643201 = r643200 / r643186;
double r643202 = r643184 + r643201;
double r643203 = r643185 * r643184;
double r643204 = r643203 / r643186;
double r643205 = r643202 - r643204;
double r643206 = r643184 - r643183;
double r643207 = r643180 - r643186;
double r643208 = r643187 / r643207;
double r643209 = r643206 * r643208;
double r643210 = r643183 + r643209;
double r643211 = r643199 ? r643205 : r643210;
double r643212 = r643182 ? r643197 : r643211;
return r643212;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.8 |
|---|---|
| Target | 9.2 |
| Herbie | 10.3 |
if a < -2.2785256636554884e-145Initial program 24.2
rmApplied associate-/l*9.7
rmApplied div-sub9.7
rmApplied div-sub9.7
rmApplied add-cube-cbrt9.8
if -2.2785256636554884e-145 < a < 2.8828813897408052e-216Initial program 30.1
Taylor expanded around inf 12.4
if 2.8828813897408052e-216 < a Initial program 23.1
rmApplied *-un-lft-identity23.1
Applied times-frac9.8
Simplified9.8
Final simplification10.3
herbie shell --seed 2020083
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))