\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;x \cdot \frac{\sin y}{y} \le 0.0:\\
\;\;\;\;x \cdot \frac{\frac{\sin y}{y}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{-\frac{x}{\frac{y}{\sin y}}}{-z}\\
\end{array}double f(double x, double y, double z) {
double r566265 = x;
double r566266 = y;
double r566267 = sin(r566266);
double r566268 = r566267 / r566266;
double r566269 = r566265 * r566268;
double r566270 = z;
double r566271 = r566269 / r566270;
return r566271;
}
double f(double x, double y, double z) {
double r566272 = x;
double r566273 = y;
double r566274 = sin(r566273);
double r566275 = r566274 / r566273;
double r566276 = r566272 * r566275;
double r566277 = 0.0;
bool r566278 = r566276 <= r566277;
double r566279 = z;
double r566280 = r566275 / r566279;
double r566281 = r566272 * r566280;
double r566282 = r566273 / r566274;
double r566283 = r566272 / r566282;
double r566284 = -r566283;
double r566285 = -r566279;
double r566286 = r566284 / r566285;
double r566287 = r566278 ? r566281 : r566286;
return r566287;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.7 |
|---|---|
| Target | 0.3 |
| Herbie | 1.6 |
if (* x (/ (sin y) y)) < 0.0Initial program 2.6
rmApplied *-un-lft-identity2.6
Applied times-frac2.8
Simplified2.8
if 0.0 < (* x (/ (sin y) y)) Initial program 2.9
rmApplied clear-num2.9
rmApplied frac-2neg2.9
Simplified2.9
Final simplification1.6
herbie shell --seed 2019351 +o rules:numerics
(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 (/ y (sin y)))) z) (if (< z 4.446702369113811e+64) (/ x (* z (/ y (sin y)))) (/ (* x (/ 1 (/ y (sin y)))) z)))
(/ (* x (/ (sin y) y)) z))