Average Error: 7.0 → 3.0
Time: 12.4s
Precision: 64
\[\frac{x \cdot 2}{y \cdot z - t \cdot z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.203051458868204248929927667100891904761 \cdot 10^{-188}:\\ \;\;\;\;\frac{2}{\left(y - t\right) \cdot \frac{z}{x}}\\ \mathbf{elif}\;z \le 159542798525938902160490191565805846528:\\ \;\;\;\;\frac{2 \cdot x}{z \cdot \left(y - t\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{2 \cdot x}{z}}{y - t}\\ \end{array}\]
\frac{x \cdot 2}{y \cdot z - t \cdot z}
\begin{array}{l}
\mathbf{if}\;z \le -1.203051458868204248929927667100891904761 \cdot 10^{-188}:\\
\;\;\;\;\frac{2}{\left(y - t\right) \cdot \frac{z}{x}}\\

\mathbf{elif}\;z \le 159542798525938902160490191565805846528:\\
\;\;\;\;\frac{2 \cdot x}{z \cdot \left(y - t\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{2 \cdot x}{z}}{y - t}\\

\end{array}
double f(double x, double y, double z, double t) {
        double r436832 = x;
        double r436833 = 2.0;
        double r436834 = r436832 * r436833;
        double r436835 = y;
        double r436836 = z;
        double r436837 = r436835 * r436836;
        double r436838 = t;
        double r436839 = r436838 * r436836;
        double r436840 = r436837 - r436839;
        double r436841 = r436834 / r436840;
        return r436841;
}

double f(double x, double y, double z, double t) {
        double r436842 = z;
        double r436843 = -1.2030514588682042e-188;
        bool r436844 = r436842 <= r436843;
        double r436845 = 2.0;
        double r436846 = y;
        double r436847 = t;
        double r436848 = r436846 - r436847;
        double r436849 = x;
        double r436850 = r436842 / r436849;
        double r436851 = r436848 * r436850;
        double r436852 = r436845 / r436851;
        double r436853 = 1.595427985259389e+38;
        bool r436854 = r436842 <= r436853;
        double r436855 = r436845 * r436849;
        double r436856 = r436842 * r436848;
        double r436857 = r436855 / r436856;
        double r436858 = r436855 / r436842;
        double r436859 = r436858 / r436848;
        double r436860 = r436854 ? r436857 : r436859;
        double r436861 = r436844 ? r436852 : r436860;
        return r436861;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original7.0
Target2.2
Herbie3.0
\[\begin{array}{l} \mathbf{if}\;\frac{x \cdot 2}{y \cdot z - t \cdot z} \lt -2.559141628295061113708240820439530037456 \cdot 10^{-13}:\\ \;\;\;\;\frac{x}{\left(y - t\right) \cdot z} \cdot 2\\ \mathbf{elif}\;\frac{x \cdot 2}{y \cdot z - t \cdot z} \lt 1.045027827330126029709547581125571222799 \cdot 10^{-269}:\\ \;\;\;\;\frac{\frac{x}{z} \cdot 2}{y - t}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{\left(y - t\right) \cdot z} \cdot 2\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -1.2030514588682042e-188

    1. Initial program 7.1

      \[\frac{x \cdot 2}{y \cdot z - t \cdot z}\]
    2. Simplified3.6

      \[\leadsto \color{blue}{\frac{2}{\frac{z}{x} \cdot \left(y - t\right)}}\]
    3. Using strategy rm
    4. Applied associate-/r*3.5

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{z}{x}}}{y - t}}\]
    5. Using strategy rm
    6. Applied div-inv3.5

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{1}{\frac{z}{x}}}}{y - t}\]
    7. Applied associate-/l*3.9

      \[\leadsto \color{blue}{\frac{2}{\frac{y - t}{\frac{1}{\frac{z}{x}}}}}\]
    8. Simplified3.6

      \[\leadsto \frac{2}{\color{blue}{\left(y - t\right) \cdot \frac{z}{x}}}\]

    if -1.2030514588682042e-188 < z < 1.595427985259389e+38

    1. Initial program 2.9

      \[\frac{x \cdot 2}{y \cdot z - t \cdot z}\]
    2. Simplified10.2

      \[\leadsto \color{blue}{\frac{2}{\frac{z}{x} \cdot \left(y - t\right)}}\]
    3. Using strategy rm
    4. Applied associate-/r*10.9

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{z}{x}}}{y - t}}\]
    5. Taylor expanded around 0 10.8

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{x}{z}}}{y - t}\]
    6. Simplified10.8

      \[\leadsto \frac{\color{blue}{\frac{2 \cdot x}{z}}}{y - t}\]
    7. Using strategy rm
    8. Applied div-inv10.8

      \[\leadsto \frac{\color{blue}{\left(2 \cdot x\right) \cdot \frac{1}{z}}}{y - t}\]
    9. Applied associate-/l*2.9

      \[\leadsto \color{blue}{\frac{2 \cdot x}{\frac{y - t}{\frac{1}{z}}}}\]
    10. Simplified2.9

      \[\leadsto \frac{2 \cdot x}{\color{blue}{z \cdot \left(y - t\right)}}\]

    if 1.595427985259389e+38 < z

    1. Initial program 12.7

      \[\frac{x \cdot 2}{y \cdot z - t \cdot z}\]
    2. Simplified3.0

      \[\leadsto \color{blue}{\frac{2}{\frac{z}{x} \cdot \left(y - t\right)}}\]
    3. Using strategy rm
    4. Applied associate-/r*2.5

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{z}{x}}}{y - t}}\]
    5. Taylor expanded around 0 2.2

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{x}{z}}}{y - t}\]
    6. Simplified2.3

      \[\leadsto \frac{\color{blue}{\frac{2 \cdot x}{z}}}{y - t}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification3.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.203051458868204248929927667100891904761 \cdot 10^{-188}:\\ \;\;\;\;\frac{2}{\left(y - t\right) \cdot \frac{z}{x}}\\ \mathbf{elif}\;z \le 159542798525938902160490191565805846528:\\ \;\;\;\;\frac{2 \cdot x}{z \cdot \left(y - t\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{2 \cdot x}{z}}{y - t}\\ \end{array}\]

Reproduce

herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z t)
  :name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"

  :herbie-target
  (if (< (/ (* x 2.0) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2.0) (if (< (/ (* x 2.0) (- (* y z) (* t z))) 1.045027827330126e-269) (/ (* (/ x z) 2.0) (- y t)) (* (/ x (* (- y t) z)) 2.0)))

  (/ (* x 2.0) (- (* y z) (* t z))))