x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -4.184043045677409878056891844086754114776 \cdot 10^{-280}:\\
\;\;\;\;\frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}} \cdot \left(\left(z - t\right) \cdot \frac{\sqrt[3]{y - x}}{\sqrt[3]{a - t}}\right) + x\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;y\\
\mathbf{else}:\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r503388 = x;
double r503389 = y;
double r503390 = r503389 - r503388;
double r503391 = z;
double r503392 = t;
double r503393 = r503391 - r503392;
double r503394 = r503390 * r503393;
double r503395 = a;
double r503396 = r503395 - r503392;
double r503397 = r503394 / r503396;
double r503398 = r503388 + r503397;
return r503398;
}
double f(double x, double y, double z, double t, double a) {
double r503399 = x;
double r503400 = y;
double r503401 = r503400 - r503399;
double r503402 = z;
double r503403 = t;
double r503404 = r503402 - r503403;
double r503405 = r503401 * r503404;
double r503406 = a;
double r503407 = r503406 - r503403;
double r503408 = r503405 / r503407;
double r503409 = r503399 + r503408;
double r503410 = -4.18404304567741e-280;
bool r503411 = r503409 <= r503410;
double r503412 = cbrt(r503401);
double r503413 = r503412 * r503412;
double r503414 = cbrt(r503407);
double r503415 = r503414 * r503414;
double r503416 = r503413 / r503415;
double r503417 = r503412 / r503414;
double r503418 = r503404 * r503417;
double r503419 = r503416 * r503418;
double r503420 = r503419 + r503399;
double r503421 = 0.0;
bool r503422 = r503409 <= r503421;
double r503423 = r503404 / r503407;
double r503424 = r503401 * r503423;
double r503425 = r503424 + r503399;
double r503426 = r503422 ? r503400 : r503425;
double r503427 = r503411 ? r503420 : r503426;
return r503427;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.7 |
|---|---|
| Target | 9.4 |
| Herbie | 10.1 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -4.18404304567741e-280Initial program 21.3
Simplified11.0
rmApplied add-cube-cbrt11.6
Applied add-cube-cbrt11.7
Applied times-frac11.7
Applied associate-*l*8.0
if -4.18404304567741e-280 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.5
Simplified59.7
Taylor expanded around 0 35.3
if 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.5
Simplified10.5
rmApplied div-inv10.6
Applied associate-*l*7.4
Simplified7.3
Final simplification10.1
herbie shell --seed 2019194
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))