\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\begin{array}{l}
\mathbf{if}\;z \le -2.982808370584645728390571403324870832662 \cdot 10^{-59} \lor \neg \left(z \le 1.637385439772020732742719657482536703395 \cdot 10^{-52}\right):\\
\;\;\;\;\left(x - \frac{\frac{y}{z}}{3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot x + \left(\mathsf{fma}\left(\frac{1}{z}, \left(-\frac{y}{3}\right) + \frac{y}{3}, \frac{1}{z} \cdot \frac{\frac{t}{3}}{y}\right) - \frac{\frac{y}{3}}{z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r746824 = x;
double r746825 = y;
double r746826 = z;
double r746827 = 3.0;
double r746828 = r746826 * r746827;
double r746829 = r746825 / r746828;
double r746830 = r746824 - r746829;
double r746831 = t;
double r746832 = r746828 * r746825;
double r746833 = r746831 / r746832;
double r746834 = r746830 + r746833;
return r746834;
}
double f(double x, double y, double z, double t) {
double r746835 = z;
double r746836 = -2.9828083705846457e-59;
bool r746837 = r746835 <= r746836;
double r746838 = 1.6373854397720207e-52;
bool r746839 = r746835 <= r746838;
double r746840 = !r746839;
bool r746841 = r746837 || r746840;
double r746842 = x;
double r746843 = y;
double r746844 = r746843 / r746835;
double r746845 = 3.0;
double r746846 = r746844 / r746845;
double r746847 = r746842 - r746846;
double r746848 = t;
double r746849 = r746835 * r746845;
double r746850 = r746849 * r746843;
double r746851 = r746848 / r746850;
double r746852 = r746847 + r746851;
double r746853 = 1.0;
double r746854 = r746853 * r746842;
double r746855 = r746853 / r746835;
double r746856 = r746843 / r746845;
double r746857 = -r746856;
double r746858 = r746857 + r746856;
double r746859 = r746848 / r746845;
double r746860 = r746859 / r746843;
double r746861 = r746855 * r746860;
double r746862 = fma(r746855, r746858, r746861);
double r746863 = r746856 / r746835;
double r746864 = r746862 - r746863;
double r746865 = r746854 + r746864;
double r746866 = r746841 ? r746852 : r746865;
return r746866;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 3.7 |
|---|---|
| Target | 1.6 |
| Herbie | 0.5 |
if z < -2.9828083705846457e-59 or 1.6373854397720207e-52 < z Initial program 0.5
rmApplied associate-/r*0.5
if -2.9828083705846457e-59 < z < 1.6373854397720207e-52Initial program 13.7
rmApplied associate-/r*3.6
rmApplied *-un-lft-identity3.6
Applied times-frac3.6
Applied *-un-lft-identity3.6
Applied prod-diff3.6
Applied associate-+l+3.6
Simplified3.6
rmApplied fma-udef3.6
Applied associate-+l+3.6
Simplified3.6
rmApplied *-un-lft-identity3.6
Applied *-un-lft-identity3.6
Applied times-frac3.6
Applied times-frac0.3
Simplified0.3
Final simplification0.5
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:precision binary64
:herbie-target
(+ (- x (/ y (* z 3))) (/ (/ t (* z 3)) y))
(+ (- x (/ y (* z 3))) (/ t (* (* z 3) y))))