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 -2.497041979016212756171192164133352171743 \cdot 10^{-308}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\sqrt[3]{y - x}}{\frac{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}{\sqrt[3]{y - x}}} \cdot \left(\sqrt[3]{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}} \cdot \frac{\sqrt[3]{\sqrt[3]{y - x}}}{\frac{\sqrt[3]{a - t}}{z - t}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r478743 = x;
double r478744 = y;
double r478745 = r478744 - r478743;
double r478746 = z;
double r478747 = t;
double r478748 = r478746 - r478747;
double r478749 = r478745 * r478748;
double r478750 = a;
double r478751 = r478750 - r478747;
double r478752 = r478749 / r478751;
double r478753 = r478743 + r478752;
return r478753;
}
double f(double x, double y, double z, double t, double a) {
double r478754 = x;
double r478755 = y;
double r478756 = r478755 - r478754;
double r478757 = z;
double r478758 = t;
double r478759 = r478757 - r478758;
double r478760 = r478756 * r478759;
double r478761 = a;
double r478762 = r478761 - r478758;
double r478763 = r478760 / r478762;
double r478764 = r478754 + r478763;
double r478765 = -2.497041979016213e-308;
bool r478766 = r478764 <= r478765;
double r478767 = r478759 / r478762;
double r478768 = r478756 * r478767;
double r478769 = r478754 + r478768;
double r478770 = 0.0;
bool r478771 = r478764 <= r478770;
double r478772 = r478754 * r478757;
double r478773 = r478772 / r478758;
double r478774 = r478755 + r478773;
double r478775 = r478757 * r478755;
double r478776 = r478775 / r478758;
double r478777 = r478774 - r478776;
double r478778 = cbrt(r478756);
double r478779 = cbrt(r478762);
double r478780 = r478779 * r478779;
double r478781 = r478780 / r478778;
double r478782 = r478778 / r478781;
double r478783 = r478778 * r478778;
double r478784 = cbrt(r478783);
double r478785 = cbrt(r478778);
double r478786 = r478779 / r478759;
double r478787 = r478785 / r478786;
double r478788 = r478784 * r478787;
double r478789 = r478782 * r478788;
double r478790 = r478754 + r478789;
double r478791 = r478771 ? r478777 : r478790;
double r478792 = r478766 ? r478769 : r478791;
return r478792;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.1 |
| Herbie | 8.6 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -2.497041979016213e-308Initial program 21.1
rmApplied *-un-lft-identity21.1
Applied times-frac7.1
Simplified7.1
if -2.497041979016213e-308 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 61.3
Taylor expanded around inf 19.0
if 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.5
rmApplied associate-/l*7.5
rmApplied *-un-lft-identity7.5
Applied add-cube-cbrt8.2
Applied times-frac8.2
Applied add-cube-cbrt8.4
Applied times-frac8.1
Simplified8.1
rmApplied *-un-lft-identity8.1
Applied *-un-lft-identity8.1
Applied times-frac8.1
Applied add-cube-cbrt8.2
Applied cbrt-prod8.2
Applied times-frac8.2
Simplified8.2
Final simplification8.6
herbie shell --seed 2019294
(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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))