\frac{\cosh x \cdot \frac{y}{x}}{z}\begin{array}{l}
\mathbf{if}\;y \le -5.260389744678724087641010398547091919543 \cdot 10^{-15}:\\
\;\;\;\;\frac{y \cdot \frac{\frac{1}{2} \cdot e^{x} + \frac{\frac{1}{2}}{e^{x}}}{z}}{x}\\
\mathbf{elif}\;y \le 1.743933658318041395875089693172887195128 \cdot 10^{-58}:\\
\;\;\;\;\frac{\left(\cosh x \cdot y\right) \cdot \frac{1}{x}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(e^{x} + e^{-x}\right) \cdot y}{z \cdot \left(x \cdot 2\right)}\\
\end{array}double f(double x, double y, double z) {
double r26089881 = x;
double r26089882 = cosh(r26089881);
double r26089883 = y;
double r26089884 = r26089883 / r26089881;
double r26089885 = r26089882 * r26089884;
double r26089886 = z;
double r26089887 = r26089885 / r26089886;
return r26089887;
}
double f(double x, double y, double z) {
double r26089888 = y;
double r26089889 = -5.260389744678724e-15;
bool r26089890 = r26089888 <= r26089889;
double r26089891 = 0.5;
double r26089892 = x;
double r26089893 = exp(r26089892);
double r26089894 = r26089891 * r26089893;
double r26089895 = r26089891 / r26089893;
double r26089896 = r26089894 + r26089895;
double r26089897 = z;
double r26089898 = r26089896 / r26089897;
double r26089899 = r26089888 * r26089898;
double r26089900 = r26089899 / r26089892;
double r26089901 = 1.7439336583180414e-58;
bool r26089902 = r26089888 <= r26089901;
double r26089903 = cosh(r26089892);
double r26089904 = r26089903 * r26089888;
double r26089905 = 1.0;
double r26089906 = r26089905 / r26089892;
double r26089907 = r26089904 * r26089906;
double r26089908 = r26089907 / r26089897;
double r26089909 = -r26089892;
double r26089910 = exp(r26089909);
double r26089911 = r26089893 + r26089910;
double r26089912 = r26089911 * r26089888;
double r26089913 = 2.0;
double r26089914 = r26089892 * r26089913;
double r26089915 = r26089897 * r26089914;
double r26089916 = r26089912 / r26089915;
double r26089917 = r26089902 ? r26089908 : r26089916;
double r26089918 = r26089890 ? r26089900 : r26089917;
return r26089918;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if y < -5.260389744678724e-15Initial program 20.2
Taylor expanded around inf 0.4
Simplified0.4
if -5.260389744678724e-15 < y < 1.7439336583180414e-58Initial program 0.2
rmApplied div-inv0.3
Applied associate-*r*0.3
if 1.7439336583180414e-58 < y Initial program 16.7
rmApplied cosh-def16.7
Applied frac-times16.7
Applied associate-/l/0.6
Final simplification0.4
herbie shell --seed 2019170
(FPCore (x y z)
:name "Linear.Quaternion:$ctan from linear-1.19.1.3"
: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))