x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\begin{array}{l}
\mathbf{if}\;z \le -744.98628896478272 \lor \neg \left(z \le 1.00942494343838114 \cdot 10^{-88}\right):\\
\;\;\;\;x + \frac{1}{\frac{1.12837916709551256}{\sqrt[3]{{\left(\frac{y}{e^{z}}\right)}^{3}}} - x}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\
\end{array}double f(double x, double y, double z) {
double r681770 = x;
double r681771 = y;
double r681772 = 1.1283791670955126;
double r681773 = z;
double r681774 = exp(r681773);
double r681775 = r681772 * r681774;
double r681776 = r681770 * r681771;
double r681777 = r681775 - r681776;
double r681778 = r681771 / r681777;
double r681779 = r681770 + r681778;
return r681779;
}
double f(double x, double y, double z) {
double r681780 = z;
double r681781 = -744.9862889647827;
bool r681782 = r681780 <= r681781;
double r681783 = 1.0094249434383811e-88;
bool r681784 = r681780 <= r681783;
double r681785 = !r681784;
bool r681786 = r681782 || r681785;
double r681787 = x;
double r681788 = 1.0;
double r681789 = 1.1283791670955126;
double r681790 = y;
double r681791 = exp(r681780);
double r681792 = r681790 / r681791;
double r681793 = 3.0;
double r681794 = pow(r681792, r681793);
double r681795 = cbrt(r681794);
double r681796 = r681789 / r681795;
double r681797 = r681796 - r681787;
double r681798 = r681788 / r681797;
double r681799 = r681787 + r681798;
double r681800 = r681789 * r681791;
double r681801 = r681787 * r681790;
double r681802 = r681800 - r681801;
double r681803 = r681790 / r681802;
double r681804 = r681787 + r681803;
double r681805 = r681786 ? r681799 : r681804;
return r681805;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.9 |
|---|---|
| Target | 0.0 |
| Herbie | 0.5 |
if z < -744.9862889647827 or 1.0094249434383811e-88 < z Initial program 5.0
rmApplied clear-num5.0
rmApplied div-sub5.0
Simplified5.0
Simplified0.0
rmApplied add-cbrt-cube0.0
Applied add-cbrt-cube18.7
Applied cbrt-undiv18.7
Simplified0.9
if -744.9862889647827 < z < 1.0094249434383811e-88Initial program 0.0
Final simplification0.5
herbie shell --seed 2020042
(FPCore (x y z)
:name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(+ x (/ 1 (- (* (/ 1.1283791670955126 y) (exp z)) x)))
(+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))