x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le -2.522598301301393440498552629827175839748 \cdot 10^{-287} \lor \neg \left(x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} \le 8.236114195952693931295069320144648694742 \cdot 10^{-259}\right):\\
\;\;\;\;x + \left(\frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\frac{\sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \frac{\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right)\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r510680 = x;
double r510681 = y;
double r510682 = z;
double r510683 = r510681 - r510682;
double r510684 = t;
double r510685 = r510684 - r510680;
double r510686 = r510683 * r510685;
double r510687 = a;
double r510688 = r510687 - r510682;
double r510689 = r510686 / r510688;
double r510690 = r510680 + r510689;
return r510690;
}
double f(double x, double y, double z, double t, double a) {
double r510691 = x;
double r510692 = y;
double r510693 = z;
double r510694 = r510692 - r510693;
double r510695 = t;
double r510696 = r510695 - r510691;
double r510697 = r510694 * r510696;
double r510698 = a;
double r510699 = r510698 - r510693;
double r510700 = r510697 / r510699;
double r510701 = r510691 + r510700;
double r510702 = -2.5225983013013934e-287;
bool r510703 = r510701 <= r510702;
double r510704 = 8.236114195952694e-259;
bool r510705 = r510701 <= r510704;
double r510706 = !r510705;
bool r510707 = r510703 || r510706;
double r510708 = cbrt(r510694);
double r510709 = r510708 * r510708;
double r510710 = cbrt(r510699);
double r510711 = r510709 / r510710;
double r510712 = r510708 / r510710;
double r510713 = cbrt(r510696);
double r510714 = r510713 * r510713;
double r510715 = r510710 * r510710;
double r510716 = cbrt(r510715);
double r510717 = r510714 / r510716;
double r510718 = r510712 * r510717;
double r510719 = r510711 * r510718;
double r510720 = cbrt(r510710);
double r510721 = r510713 / r510720;
double r510722 = r510719 * r510721;
double r510723 = r510691 + r510722;
double r510724 = r510691 * r510692;
double r510725 = r510724 / r510693;
double r510726 = r510725 + r510695;
double r510727 = r510695 * r510692;
double r510728 = r510727 / r510693;
double r510729 = r510726 - r510728;
double r510730 = r510707 ? r510723 : r510729;
return r510730;
}




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 | 12.1 |
| Herbie | 9.2 |
if (+ x (/ (* (- y z) (- t x)) (- a z))) < -2.5225983013013934e-287 or 8.236114195952694e-259 < (+ x (/ (* (- y z) (- t x)) (- a z))) Initial program 21.6
rmApplied add-cube-cbrt22.1
Applied times-frac8.6
rmApplied add-cube-cbrt8.7
Applied cbrt-prod8.7
Applied add-cube-cbrt8.9
Applied times-frac8.9
Applied associate-*r*8.1
rmApplied add-cube-cbrt8.1
Applied times-frac8.1
Applied associate-*l*7.9
if -2.5225983013013934e-287 < (+ x (/ (* (- y z) (- t x)) (- a z))) < 8.236114195952694e-259Initial program 55.2
Taylor expanded around inf 22.6
Final simplification9.2
herbie shell --seed 2019297
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.25361310560950359e188) (- t (* (/ y z) (- t x))) (if (< z 4.44670236911381103e64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))