\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;y \le -23.9528592754304945:\\
\;\;\;\;\frac{1}{2} \cdot \frac{x \cdot y}{z} + \frac{y}{x \cdot z}\\
\mathbf{elif}\;y \le 7876022.030429827:\\
\;\;\;\;\frac{\cosh x \cdot \frac{y}{x}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{y}{z} \cdot \left(e^{x} + e^{-x}\right)}{2 \cdot x}\\
\end{array}double f(double x, double y, double z) {
double r593066 = x;
double r593067 = cosh(r593066);
double r593068 = y;
double r593069 = r593068 / r593066;
double r593070 = r593067 * r593069;
double r593071 = z;
double r593072 = r593070 / r593071;
return r593072;
}
double f(double x, double y, double z) {
double r593073 = y;
double r593074 = -23.952859275430495;
bool r593075 = r593073 <= r593074;
double r593076 = 0.5;
double r593077 = x;
double r593078 = r593077 * r593073;
double r593079 = z;
double r593080 = r593078 / r593079;
double r593081 = r593076 * r593080;
double r593082 = r593077 * r593079;
double r593083 = r593073 / r593082;
double r593084 = r593081 + r593083;
double r593085 = 7876022.030429827;
bool r593086 = r593073 <= r593085;
double r593087 = cosh(r593077);
double r593088 = r593073 / r593077;
double r593089 = r593087 * r593088;
double r593090 = r593089 / r593079;
double r593091 = r593073 / r593079;
double r593092 = exp(r593077);
double r593093 = -r593077;
double r593094 = exp(r593093);
double r593095 = r593092 + r593094;
double r593096 = r593091 * r593095;
double r593097 = 2.0;
double r593098 = r593097 * r593077;
double r593099 = r593096 / r593098;
double r593100 = r593086 ? r593090 : r593099;
double r593101 = r593075 ? r593084 : r593100;
return r593101;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if y < -23.952859275430495Initial program 20.7
rmApplied *-un-lft-identity20.7
Applied times-frac20.7
Simplified20.7
Simplified0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.4
Taylor expanded around 0 1.1
if -23.952859275430495 < y < 7876022.030429827Initial program 0.3
if 7876022.030429827 < y Initial program 22.1
rmApplied *-un-lft-identity22.1
Applied times-frac21.9
Simplified21.9
Simplified0.3
rmApplied *-un-lft-identity0.3
Applied times-frac0.3
rmApplied associate-*l/0.3
Applied cosh-def0.3
Applied frac-times0.3
Simplified0.3
Final simplification0.4
herbie shell --seed 2020043
(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))