\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;z \le -2.56453648361878051 \cdot 10^{-32} \lor \neg \left(z \le 59076.5855875224006\right):\\
\;\;\;\;\cosh x \cdot \frac{y}{x \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{y}{z} \cdot \mathsf{fma}\left(e^{x}, \frac{1}{2}, \frac{\frac{1}{2}}{e^{x}}\right)}{x}\\
\end{array}double f(double x, double y, double z) {
double r437964 = x;
double r437965 = cosh(r437964);
double r437966 = y;
double r437967 = r437966 / r437964;
double r437968 = r437965 * r437967;
double r437969 = z;
double r437970 = r437968 / r437969;
return r437970;
}
double f(double x, double y, double z) {
double r437971 = z;
double r437972 = -2.5645364836187805e-32;
bool r437973 = r437971 <= r437972;
double r437974 = 59076.5855875224;
bool r437975 = r437971 <= r437974;
double r437976 = !r437975;
bool r437977 = r437973 || r437976;
double r437978 = x;
double r437979 = cosh(r437978);
double r437980 = y;
double r437981 = r437978 * r437971;
double r437982 = r437980 / r437981;
double r437983 = r437979 * r437982;
double r437984 = r437980 / r437971;
double r437985 = exp(r437978);
double r437986 = 0.5;
double r437987 = r437986 / r437985;
double r437988 = fma(r437985, r437986, r437987);
double r437989 = r437984 * r437988;
double r437990 = r437989 / r437978;
double r437991 = r437977 ? r437983 : r437990;
return r437991;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 7.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.3 |
if z < -2.5645364836187805e-32 or 59076.5855875224 < z Initial program 11.5
rmApplied *-un-lft-identity11.5
Applied times-frac11.5
Simplified11.5
Simplified0.4
if -2.5645364836187805e-32 < z < 59076.5855875224Initial program 0.3
rmApplied *-un-lft-identity0.3
Applied times-frac0.3
Simplified0.3
Simplified19.7
Taylor expanded around inf 19.7
Simplified0.3
Final simplification0.3
herbie shell --seed 2020021 +o rules:numerics
(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.0385305359351529e-39) (/ (/ (* (cosh x) y) x) z) (* (/ (/ y z) x) (cosh x))))
(/ (* (cosh x) (/ y x)) z))