x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -4.95393039354896 \cdot 10^{-270}:\\
\;\;\;\;\left(\frac{y}{\frac{a - t}{z - t}} + x\right) - \left(\frac{\sqrt[3]{x}}{\sqrt[3]{a - t}} \cdot \frac{\sqrt[3]{x}}{\sqrt[3]{a - t}}\right) \cdot \frac{\sqrt[3]{x}}{\frac{\sqrt[3]{a - t}}{z - t}}\\
\mathbf{elif}\;a \le 1.7492318001765757 \cdot 10^{-157}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{y}{\frac{a - t}{z - t}} + x\right) - \frac{x}{\frac{a - t}{z - t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r31324665 = x;
double r31324666 = y;
double r31324667 = r31324666 - r31324665;
double r31324668 = z;
double r31324669 = t;
double r31324670 = r31324668 - r31324669;
double r31324671 = r31324667 * r31324670;
double r31324672 = a;
double r31324673 = r31324672 - r31324669;
double r31324674 = r31324671 / r31324673;
double r31324675 = r31324665 + r31324674;
return r31324675;
}
double f(double x, double y, double z, double t, double a) {
double r31324676 = a;
double r31324677 = -4.95393039354896e-270;
bool r31324678 = r31324676 <= r31324677;
double r31324679 = y;
double r31324680 = t;
double r31324681 = r31324676 - r31324680;
double r31324682 = z;
double r31324683 = r31324682 - r31324680;
double r31324684 = r31324681 / r31324683;
double r31324685 = r31324679 / r31324684;
double r31324686 = x;
double r31324687 = r31324685 + r31324686;
double r31324688 = cbrt(r31324686);
double r31324689 = cbrt(r31324681);
double r31324690 = r31324688 / r31324689;
double r31324691 = r31324690 * r31324690;
double r31324692 = r31324689 / r31324683;
double r31324693 = r31324688 / r31324692;
double r31324694 = r31324691 * r31324693;
double r31324695 = r31324687 - r31324694;
double r31324696 = 1.7492318001765757e-157;
bool r31324697 = r31324676 <= r31324696;
double r31324698 = r31324686 * r31324682;
double r31324699 = r31324698 / r31324680;
double r31324700 = r31324679 + r31324699;
double r31324701 = r31324682 * r31324679;
double r31324702 = r31324701 / r31324680;
double r31324703 = r31324700 - r31324702;
double r31324704 = r31324686 / r31324684;
double r31324705 = r31324687 - r31324704;
double r31324706 = r31324697 ? r31324703 : r31324705;
double r31324707 = r31324678 ? r31324695 : r31324706;
return r31324707;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 23.5 |
|---|---|
| Target | 9.4 |
| Herbie | 10.9 |
if a < -4.95393039354896e-270Initial program 23.4
rmApplied associate-/l*11.4
rmApplied div-sub11.5
Applied associate-+r-11.5
rmApplied *-un-lft-identity11.5
Applied add-cube-cbrt11.6
Applied times-frac11.6
Applied add-cube-cbrt11.6
Applied times-frac11.7
Simplified11.7
if -4.95393039354896e-270 < a < 1.7492318001765757e-157Initial program 28.5
Taylor expanded around inf 11.3
if 1.7492318001765757e-157 < a Initial program 21.9
rmApplied associate-/l*9.8
rmApplied div-sub9.8
Applied associate-+r-9.8
Final simplification10.9
herbie shell --seed 2019158
(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) (/ (- 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))))