\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;z \le -2.56082919711251703348519476677496253443 \cdot 10^{-15} \lor \neg \left(z \le 4.489894380771518759583953311198839017656 \cdot 10^{-96}\right):\\
\;\;\;\;\frac{\frac{\left(e^{-x} + e^{x}\right) \cdot y}{x \cdot z}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{y}{z}}{x} \cdot \cosh x\\
\end{array}double f(double x, double y, double z) {
double r489733 = x;
double r489734 = cosh(r489733);
double r489735 = y;
double r489736 = r489735 / r489733;
double r489737 = r489734 * r489736;
double r489738 = z;
double r489739 = r489737 / r489738;
return r489739;
}
double f(double x, double y, double z) {
double r489740 = z;
double r489741 = -2.560829197112517e-15;
bool r489742 = r489740 <= r489741;
double r489743 = 4.489894380771519e-96;
bool r489744 = r489740 <= r489743;
double r489745 = !r489744;
bool r489746 = r489742 || r489745;
double r489747 = x;
double r489748 = -r489747;
double r489749 = exp(r489748);
double r489750 = exp(r489747);
double r489751 = r489749 + r489750;
double r489752 = y;
double r489753 = r489751 * r489752;
double r489754 = r489747 * r489740;
double r489755 = r489753 / r489754;
double r489756 = 2.0;
double r489757 = r489755 / r489756;
double r489758 = r489752 / r489740;
double r489759 = r489758 / r489747;
double r489760 = cosh(r489747);
double r489761 = r489759 * r489760;
double r489762 = r489746 ? r489757 : r489761;
return r489762;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if z < -2.560829197112517e-15 or 4.489894380771519e-96 < z Initial program 10.5
Simplified0.9
rmApplied cosh-def0.9
Applied associate-*r/0.9
Simplified0.9
if -2.560829197112517e-15 < z < 4.489894380771519e-96Initial program 0.3
Simplified23.8
rmApplied *-un-lft-identity23.8
Applied associate-*l*23.8
Simplified0.3
Final simplification0.7
herbie shell --seed 2019194
(FPCore (x y z)
:name "Linear.Quaternion:$ctan from linear-1.19.1.3"
:herbie-target
(if (< y -4.618902267687042e-52) (* (/ (/ y z) x) (cosh x)) (if (< y 1.038530535935153e-39) (/ (/ (* (cosh x) y) x) z) (* (/ (/ y z) x) (cosh x))))
(/ (* (cosh x) (/ y x)) z))