Average Error: 2.8 → 0.2
Time: 19.2s
Precision: 64
\[\frac{x \cdot \frac{\sin y}{y}}{z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -5593196487055916383862784:\\ \;\;\;\;\frac{x \cdot \frac{\frac{1}{y}}{\frac{1}{\sin y}}}{z}\\ \mathbf{elif}\;z \le 3.914017025903180346801946143386885523796:\\ \;\;\;\;\frac{x}{\frac{z}{\frac{\sin y}{y}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\ \end{array}\]
\frac{x \cdot \frac{\sin y}{y}}{z}
\begin{array}{l}
\mathbf{if}\;z \le -5593196487055916383862784:\\
\;\;\;\;\frac{x \cdot \frac{\frac{1}{y}}{\frac{1}{\sin y}}}{z}\\

\mathbf{elif}\;z \le 3.914017025903180346801946143386885523796:\\
\;\;\;\;\frac{x}{\frac{z}{\frac{\sin y}{y}}}\\

\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\

\end{array}
double f(double x, double y, double z) {
        double r18207834 = x;
        double r18207835 = y;
        double r18207836 = sin(r18207835);
        double r18207837 = r18207836 / r18207835;
        double r18207838 = r18207834 * r18207837;
        double r18207839 = z;
        double r18207840 = r18207838 / r18207839;
        return r18207840;
}

double f(double x, double y, double z) {
        double r18207841 = z;
        double r18207842 = -5.593196487055916e+24;
        bool r18207843 = r18207841 <= r18207842;
        double r18207844 = x;
        double r18207845 = 1.0;
        double r18207846 = y;
        double r18207847 = r18207845 / r18207846;
        double r18207848 = sin(r18207846);
        double r18207849 = r18207845 / r18207848;
        double r18207850 = r18207847 / r18207849;
        double r18207851 = r18207844 * r18207850;
        double r18207852 = r18207851 / r18207841;
        double r18207853 = 3.9140170259031803;
        bool r18207854 = r18207841 <= r18207853;
        double r18207855 = r18207848 / r18207846;
        double r18207856 = r18207841 / r18207855;
        double r18207857 = r18207844 / r18207856;
        double r18207858 = r18207846 / r18207848;
        double r18207859 = r18207845 / r18207858;
        double r18207860 = r18207844 * r18207859;
        double r18207861 = r18207860 / r18207841;
        double r18207862 = r18207854 ? r18207857 : r18207861;
        double r18207863 = r18207843 ? r18207852 : r18207862;
        return r18207863;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original2.8
Target0.3
Herbie0.2
\[\begin{array}{l} \mathbf{if}\;z \lt -4.217372020342714661850238929213415773451 \cdot 10^{-29}:\\ \;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\ \mathbf{elif}\;z \lt 4.446702369113811028051510715777703865332 \cdot 10^{64}:\\ \;\;\;\;\frac{x}{z \cdot \frac{y}{\sin y}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -5.593196487055916e+24

    1. Initial program 0.1

      \[\frac{x \cdot \frac{\sin y}{y}}{z}\]
    2. Using strategy rm
    3. Applied clear-num0.1

      \[\leadsto \frac{x \cdot \color{blue}{\frac{1}{\frac{y}{\sin y}}}}{z}\]
    4. Using strategy rm
    5. Applied div-inv0.2

      \[\leadsto \frac{x \cdot \frac{1}{\color{blue}{y \cdot \frac{1}{\sin y}}}}{z}\]
    6. Applied associate-/r*0.2

      \[\leadsto \frac{x \cdot \color{blue}{\frac{\frac{1}{y}}{\frac{1}{\sin y}}}}{z}\]

    if -5.593196487055916e+24 < z < 3.9140170259031803

    1. Initial program 5.7

      \[\frac{x \cdot \frac{\sin y}{y}}{z}\]
    2. Using strategy rm
    3. Applied associate-/l*0.2

      \[\leadsto \color{blue}{\frac{x}{\frac{z}{\frac{\sin y}{y}}}}\]

    if 3.9140170259031803 < z

    1. Initial program 0.1

      \[\frac{x \cdot \frac{\sin y}{y}}{z}\]
    2. Using strategy rm
    3. Applied clear-num0.1

      \[\leadsto \frac{x \cdot \color{blue}{\frac{1}{\frac{y}{\sin y}}}}{z}\]
    4. Using strategy rm
    5. Applied div-inv0.2

      \[\leadsto \frac{x \cdot \frac{1}{\color{blue}{y \cdot \frac{1}{\sin y}}}}{z}\]
    6. Applied associate-/r*0.1

      \[\leadsto \frac{x \cdot \color{blue}{\frac{\frac{1}{y}}{\frac{1}{\sin y}}}}{z}\]
    7. Using strategy rm
    8. Applied clear-num0.2

      \[\leadsto \frac{x \cdot \color{blue}{\frac{1}{\frac{\frac{1}{\sin y}}{\frac{1}{y}}}}}{z}\]
    9. Simplified0.1

      \[\leadsto \frac{x \cdot \frac{1}{\color{blue}{\frac{y}{\sin y}}}}{z}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -5593196487055916383862784:\\ \;\;\;\;\frac{x \cdot \frac{\frac{1}{y}}{\frac{1}{\sin y}}}{z}\\ \mathbf{elif}\;z \le 3.914017025903180346801946143386885523796:\\ \;\;\;\;\frac{x}{\frac{z}{\frac{\sin y}{y}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\ \end{array}\]

Reproduce

herbie shell --seed 2019172 +o rules:numerics
(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))