\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;\frac{\sin y}{y} \leq 1.1620883010817137 \cdot 10^{-236}:\\
\;\;\;\;x \cdot \frac{\sin y}{y \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\frac{\sin y}{y}} \cdot \left(x \cdot \sqrt{\frac{\sin y}{y}}\right)}{z}\\
\end{array}(FPCore (x y z) :precision binary64 (/ (* x (/ (sin y) y)) z))
(FPCore (x y z) :precision binary64 (if (<= (/ (sin y) y) 1.1620883010817137e-236) (* x (/ (sin y) (* y z))) (/ (* (sqrt (/ (sin y) y)) (* x (sqrt (/ (sin y) y)))) z)))
double code(double x, double y, double z) {
return (x * (sin(y) / y)) / z;
}
double code(double x, double y, double z) {
double tmp;
if ((sin(y) / y) <= 1.1620883010817137e-236) {
tmp = x * (sin(y) / (y * z));
} else {
tmp = (sqrt(sin(y) / y) * (x * sqrt(sin(y) / y))) / z;
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.8 |
|---|---|
| Target | 0.3 |
| Herbie | 2.9 |
if (/.f64 (sin.f64 y) y) < 1.162088301081714e-236Initial program 5.8
rmApplied *-un-lft-identity_binary64_172645.8
Applied times-frac_binary64_172705.5
Simplified5.5
rmApplied associate-/l/_binary64_172135.9
Simplified5.9
if 1.162088301081714e-236 < (/.f64 (sin.f64 y) y) Initial program 1.3
rmApplied add-sqr-sqrt_binary64_172851.4
Applied associate-*r*_binary64_172061.4
Final simplification2.9
herbie shell --seed 2020281
(FPCore (x y z)
:name "Linear.Quaternion:$ctanh from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< z -4.2173720203427147e-29) (/ (* x (/ 1.0 (/ y (sin y)))) z) (if (< z 4.446702369113811e+64) (/ x (* z (/ y (sin y)))) (/ (* x (/ 1.0 (/ y (sin y)))) z)))
(/ (* x (/ (sin y) y)) z))