\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;y \le -2.766253741311095338476931406909394285838 \cdot 10^{-74} \lor \neg \left(y \le 1.349115509152380621030363919966636831956 \cdot 10^{-56}\right):\\
\;\;\;\;\frac{\frac{y \cdot \left(\frac{1}{2} \cdot \left(e^{x} + e^{-x}\right)\right)}{z}}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\cosh x \cdot y\right) \cdot \frac{1}{x}}{z}\\
\end{array}double f(double x, double y, double z) {
double r347523 = x;
double r347524 = cosh(r347523);
double r347525 = y;
double r347526 = r347525 / r347523;
double r347527 = r347524 * r347526;
double r347528 = z;
double r347529 = r347527 / r347528;
return r347529;
}
double f(double x, double y, double z) {
double r347530 = y;
double r347531 = -2.7662537413110953e-74;
bool r347532 = r347530 <= r347531;
double r347533 = 1.3491155091523806e-56;
bool r347534 = r347530 <= r347533;
double r347535 = !r347534;
bool r347536 = r347532 || r347535;
double r347537 = 0.5;
double r347538 = x;
double r347539 = exp(r347538);
double r347540 = -r347538;
double r347541 = exp(r347540);
double r347542 = r347539 + r347541;
double r347543 = r347537 * r347542;
double r347544 = r347530 * r347543;
double r347545 = z;
double r347546 = r347544 / r347545;
double r347547 = r347546 / r347538;
double r347548 = cosh(r347538);
double r347549 = r347548 * r347530;
double r347550 = 1.0;
double r347551 = r347550 / r347538;
double r347552 = r347549 * r347551;
double r347553 = r347552 / r347545;
double r347554 = r347536 ? r347547 : r347553;
return r347554;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.8 |
if y < -2.7662537413110953e-74 or 1.3491155091523806e-56 < y Initial program 15.7
rmApplied associate-*r/15.7
Applied associate-/l/1.2
Taylor expanded around inf 1.2
Simplified1.3
if -2.7662537413110953e-74 < y < 1.3491155091523806e-56Initial program 0.3
rmApplied div-inv0.3
Applied associate-*r*0.4
Final simplification0.8
herbie shell --seed 2019209
(FPCore (x y z)
:name "Linear.Quaternion:$ctan from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< y -4.618902267687042e-52) (* (/ (/ y z) x) (cosh x)) (if (< y 1.03853053593515302e-39) (/ (/ (* (cosh x) y) x) z) (* (/ (/ y z) x) (cosh x))))
(/ (* (cosh x) (/ y x)) z))