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 r479981 = x;
double r479982 = y;
double r479983 = r479982 - r479981;
double r479984 = z;
double r479985 = t;
double r479986 = r479984 - r479985;
double r479987 = r479983 * r479986;
double r479988 = a;
double r479989 = r479988 - r479985;
double r479990 = r479987 / r479989;
double r479991 = r479981 + r479990;
return r479991;
}
double f(double x, double y, double z, double t, double a) {
double r479992 = x;
double r479993 = y;
double r479994 = r479993 - r479992;
double r479995 = z;
double r479996 = t;
double r479997 = r479995 - r479996;
double r479998 = r479994 * r479997;
double r479999 = a;
double r480000 = r479999 - r479996;
double r480001 = r479998 / r480000;
double r480002 = r479992 + r480001;
double r480003 = -4.18404304567741e-280;
bool r480004 = r480002 <= r480003;
double r480005 = cbrt(r479994);
double r480006 = r480005 * r480005;
double r480007 = cbrt(r480000);
double r480008 = r480007 * r480007;
double r480009 = r480006 / r480008;
double r480010 = r480005 / r480007;
double r480011 = r479997 * r480010;
double r480012 = r480009 * r480011;
double r480013 = r480012 + r479992;
double r480014 = 0.0;
bool r480015 = r480002 <= r480014;
double r480016 = r479997 / r480000;
double r480017 = r479994 * r480016;
double r480018 = r480017 + r479992;
double r480019 = r480015 ? r479993 : r480018;
double r480020 = r480004 ? r480013 : r480019;
return r480020;
}




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))))