\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;\cosh x \cdot \frac{y}{x} \le -1.3555263400315947 \cdot 10^{223}:\\
\;\;\;\;\frac{y}{z} \cdot \frac{\mathsf{fma}\left(e^{x}, \frac{1}{2}, \frac{\frac{1}{2}}{e^{x}}\right)}{x}\\
\mathbf{elif}\;\cosh x \cdot \frac{y}{x} \le 2.79890311216328603 \cdot 10^{202}:\\
\;\;\;\;\frac{e^{\log \left(\cosh x\right)} \cdot \frac{y}{x}}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(e^{x} + e^{-x}\right) \cdot y\right) \cdot \frac{1}{z \cdot \left(2 \cdot x\right)}\\
\end{array}double f(double x, double y, double z) {
double r786303 = x;
double r786304 = cosh(r786303);
double r786305 = y;
double r786306 = r786305 / r786303;
double r786307 = r786304 * r786306;
double r786308 = z;
double r786309 = r786307 / r786308;
return r786309;
}
double f(double x, double y, double z) {
double r786310 = x;
double r786311 = cosh(r786310);
double r786312 = y;
double r786313 = r786312 / r786310;
double r786314 = r786311 * r786313;
double r786315 = -1.3555263400315947e+223;
bool r786316 = r786314 <= r786315;
double r786317 = z;
double r786318 = r786312 / r786317;
double r786319 = exp(r786310);
double r786320 = 0.5;
double r786321 = r786320 / r786319;
double r786322 = fma(r786319, r786320, r786321);
double r786323 = r786322 / r786310;
double r786324 = r786318 * r786323;
double r786325 = 2.798903112163286e+202;
bool r786326 = r786314 <= r786325;
double r786327 = log(r786311);
double r786328 = exp(r786327);
double r786329 = r786328 * r786313;
double r786330 = r786329 / r786317;
double r786331 = -r786310;
double r786332 = exp(r786331);
double r786333 = r786319 + r786332;
double r786334 = r786333 * r786312;
double r786335 = 1.0;
double r786336 = 2.0;
double r786337 = r786336 * r786310;
double r786338 = r786317 * r786337;
double r786339 = r786335 / r786338;
double r786340 = r786334 * r786339;
double r786341 = r786326 ? r786330 : r786340;
double r786342 = r786316 ? r786324 : r786341;
return r786342;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 7.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if (* (cosh x) (/ y x)) < -1.3555263400315947e+223Initial program 33.2
Taylor expanded around inf 0.8
Simplified0.9
if -1.3555263400315947e+223 < (* (cosh x) (/ y x)) < 2.798903112163286e+202Initial program 0.2
rmApplied add-exp-log0.3
if 2.798903112163286e+202 < (* (cosh x) (/ y x)) Initial program 28.7
rmApplied cosh-def28.7
Applied frac-times28.7
Applied associate-/l/0.5
rmApplied div-inv0.7
Final simplification0.4
herbie shell --seed 2020034 +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))