\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;z \le -5.090910714546979714783795734486200807187 \cdot 10^{-38}:\\
\;\;\;\;\frac{\frac{\sin y}{y} \cdot x}{z}\\
\mathbf{elif}\;z \le 4.576842764057799981661987703139532669264 \cdot 10^{-157}:\\
\;\;\;\;\left(\frac{1}{z} \cdot \frac{\sin y}{y}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \frac{\sin y}{y}\\
\end{array}double f(double x, double y, double z) {
double r1000468 = x;
double r1000469 = y;
double r1000470 = sin(r1000469);
double r1000471 = r1000470 / r1000469;
double r1000472 = r1000468 * r1000471;
double r1000473 = z;
double r1000474 = r1000472 / r1000473;
return r1000474;
}
double f(double x, double y, double z) {
double r1000475 = z;
double r1000476 = -5.09091071454698e-38;
bool r1000477 = r1000475 <= r1000476;
double r1000478 = y;
double r1000479 = sin(r1000478);
double r1000480 = r1000479 / r1000478;
double r1000481 = x;
double r1000482 = r1000480 * r1000481;
double r1000483 = r1000482 / r1000475;
double r1000484 = 4.5768427640578e-157;
bool r1000485 = r1000475 <= r1000484;
double r1000486 = 1.0;
double r1000487 = r1000486 / r1000475;
double r1000488 = r1000487 * r1000480;
double r1000489 = r1000488 * r1000481;
double r1000490 = r1000481 / r1000475;
double r1000491 = r1000490 * r1000480;
double r1000492 = r1000485 ? r1000489 : r1000491;
double r1000493 = r1000477 ? r1000483 : r1000492;
return r1000493;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.7 |
if z < -5.09091071454698e-38Initial program 0.1
Simplified4.6
rmApplied div-inv4.6
rmApplied un-div-inv4.6
Applied associate-*r/0.1
Simplified0.1
if -5.09091071454698e-38 < z < 4.5768427640578e-157Initial program 7.1
Simplified0.3
rmApplied div-inv0.4
if 4.5768427640578e-157 < z Initial program 1.1
Simplified3.6
rmApplied add-cube-cbrt3.8
rmApplied *-un-lft-identity3.8
Applied associate-*l*3.8
Simplified1.3
Final simplification0.7
herbie shell --seed 2019179
(FPCore (x y z)
:name "Linear.Quaternion:$ctanh from linear-1.19.1.3"
: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))