\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;z \le -67691958370526.5391:\\
\;\;\;\;\frac{x \cdot \left(\sin y \cdot \frac{1}{y}\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\frac{\sin y}{y}}}\\
\end{array}double f(double x, double y, double z) {
double r520414 = x;
double r520415 = y;
double r520416 = sin(r520415);
double r520417 = r520416 / r520415;
double r520418 = r520414 * r520417;
double r520419 = z;
double r520420 = r520418 / r520419;
return r520420;
}
double f(double x, double y, double z) {
double r520421 = z;
double r520422 = -67691958370526.54;
bool r520423 = r520421 <= r520422;
double r520424 = x;
double r520425 = y;
double r520426 = sin(r520425);
double r520427 = 1.0;
double r520428 = r520427 / r520425;
double r520429 = r520426 * r520428;
double r520430 = r520424 * r520429;
double r520431 = r520430 / r520421;
double r520432 = r520426 / r520425;
double r520433 = r520421 / r520432;
double r520434 = r520424 / r520433;
double r520435 = r520423 ? r520431 : r520434;
return r520435;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.7 |
|---|---|
| Target | 0.3 |
| Herbie | 1.7 |
if z < -67691958370526.54Initial program 0.1
rmApplied div-inv0.2
if -67691958370526.54 < z Initial program 3.6
rmApplied associate-/l*2.2
Final simplification1.7
herbie shell --seed 2020027 +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))