\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;y \le -5.01900006072222914379297612862204481415 \cdot 10^{-35} \lor \neg \left(y \le 2.115191367755841562647547400301365035298 \cdot 10^{-51}\right):\\
\;\;\;\;\frac{\frac{\cosh x \cdot y}{z}}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{1}{2} \cdot \left(e^{-1 \cdot x} + e^{x}\right)}{\frac{x}{y}}}{z}\\
\end{array}double f(double x, double y, double z) {
double r445514 = x;
double r445515 = cosh(r445514);
double r445516 = y;
double r445517 = r445516 / r445514;
double r445518 = r445515 * r445517;
double r445519 = z;
double r445520 = r445518 / r445519;
return r445520;
}
double f(double x, double y, double z) {
double r445521 = y;
double r445522 = -5.019000060722229e-35;
bool r445523 = r445521 <= r445522;
double r445524 = 2.1151913677558416e-51;
bool r445525 = r445521 <= r445524;
double r445526 = !r445525;
bool r445527 = r445523 || r445526;
double r445528 = x;
double r445529 = cosh(r445528);
double r445530 = r445529 * r445521;
double r445531 = z;
double r445532 = r445530 / r445531;
double r445533 = r445532 / r445528;
double r445534 = 0.5;
double r445535 = -1.0;
double r445536 = r445535 * r445528;
double r445537 = exp(r445536);
double r445538 = exp(r445528);
double r445539 = r445537 + r445538;
double r445540 = r445534 * r445539;
double r445541 = r445528 / r445521;
double r445542 = r445540 / r445541;
double r445543 = r445542 / r445531;
double r445544 = r445527 ? r445533 : r445543;
return r445544;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.5 |
if y < -5.019000060722229e-35 or 2.1151913677558416e-51 < y Initial program 17.1
rmApplied div-inv17.2
rmApplied associate-*r/17.2
Applied associate-*l/0.9
Simplified0.8
if -5.019000060722229e-35 < y < 2.1151913677558416e-51Initial program 0.3
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.5
herbie shell --seed 2019322
(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))