\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;z \le -75754556562732115991855045745747951616 \lor \neg \left(z \le 189132.753253453527577221393585205078125\right):\\
\;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{3} + {\left(e^{-x}\right)}^{3}}{\mathsf{fma}\left(e^{x}, e^{x}, \mathsf{expm1}\left(-2 \cdot x\right)\right)} \cdot y}{z \cdot \left(2 \cdot x\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left(e^{x} + e^{-x}\right) \cdot y}{z}}{2 \cdot x}\\
\end{array}double f(double x, double y, double z) {
double r384387 = x;
double r384388 = cosh(r384387);
double r384389 = y;
double r384390 = r384389 / r384387;
double r384391 = r384388 * r384390;
double r384392 = z;
double r384393 = r384391 / r384392;
return r384393;
}
double f(double x, double y, double z) {
double r384394 = z;
double r384395 = -7.575455656273212e+37;
bool r384396 = r384394 <= r384395;
double r384397 = 189132.75325345353;
bool r384398 = r384394 <= r384397;
double r384399 = !r384398;
bool r384400 = r384396 || r384399;
double r384401 = x;
double r384402 = exp(r384401);
double r384403 = 3.0;
double r384404 = pow(r384402, r384403);
double r384405 = -r384401;
double r384406 = exp(r384405);
double r384407 = pow(r384406, r384403);
double r384408 = r384404 + r384407;
double r384409 = -2.0;
double r384410 = r384409 * r384401;
double r384411 = expm1(r384410);
double r384412 = fma(r384402, r384402, r384411);
double r384413 = r384408 / r384412;
double r384414 = y;
double r384415 = r384413 * r384414;
double r384416 = 2.0;
double r384417 = r384416 * r384401;
double r384418 = r384394 * r384417;
double r384419 = r384415 / r384418;
double r384420 = r384402 + r384406;
double r384421 = r384420 * r384414;
double r384422 = r384421 / r384394;
double r384423 = r384422 / r384417;
double r384424 = r384400 ? r384419 : r384423;
return r384424;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 7.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.4 |
if z < -7.575455656273212e+37 or 189132.75325345353 < z Initial program 12.5
rmApplied cosh-def12.5
Applied frac-times12.5
Applied associate-/l/0.3
rmApplied flip3-+0.5
Simplified0.5
if -7.575455656273212e+37 < z < 189132.75325345353Initial program 0.4
rmApplied cosh-def0.4
Applied frac-times0.4
Applied associate-/l/17.4
rmApplied associate-/r*0.4
Final simplification0.4
herbie shell --seed 2019325 +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.038530535935153e-39) (/ (/ (* (cosh x) y) x) z) (* (/ (/ y z) x) (cosh x))))
(/ (* (cosh x) (/ y x)) z))