x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;z \le 4.680081952247758434360845558331483175442 \cdot 10^{-308}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\left(y - x\right) \cdot \frac{\sqrt{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt{z}}{\sqrt[3]{t}}\\
\end{array}double f(double x, double y, double z, double t) {
double r350763 = x;
double r350764 = y;
double r350765 = r350764 - r350763;
double r350766 = z;
double r350767 = t;
double r350768 = r350766 / r350767;
double r350769 = r350765 * r350768;
double r350770 = r350763 + r350769;
return r350770;
}
double f(double x, double y, double z, double t) {
double r350771 = z;
double r350772 = 4.680081952247758e-308;
bool r350773 = r350771 <= r350772;
double r350774 = x;
double r350775 = y;
double r350776 = r350775 - r350774;
double r350777 = t;
double r350778 = r350771 / r350777;
double r350779 = r350776 * r350778;
double r350780 = r350774 + r350779;
double r350781 = sqrt(r350771);
double r350782 = cbrt(r350777);
double r350783 = r350782 * r350782;
double r350784 = r350781 / r350783;
double r350785 = r350776 * r350784;
double r350786 = r350781 / r350782;
double r350787 = r350785 * r350786;
double r350788 = r350774 + r350787;
double r350789 = r350773 ? r350780 : r350788;
return r350789;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.9 |
|---|---|
| Target | 2.2 |
| Herbie | 1.3 |
if z < 4.680081952247758e-308Initial program 1.5
if 4.680081952247758e-308 < z Initial program 2.3
rmApplied add-cube-cbrt2.8
Applied add-sqr-sqrt2.8
Applied times-frac2.8
Applied associate-*r*1.1
Final simplification1.3
herbie shell --seed 2019303
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:precision binary64
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.887) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))