Average Error: 10.8 → 1.8
Time: 10.8s
Precision: 64
\[\frac{x - y \cdot z}{t - a \cdot z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -2.0099085297249333 \cdot 10^{-90} \lor \neg \left(z \le 2.72035343737030278 \cdot 10^{-27}\right):\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{t - a \cdot z}{x - y \cdot z}}\\ \end{array}\]
\frac{x - y \cdot z}{t - a \cdot z}
\begin{array}{l}
\mathbf{if}\;z \le -2.0099085297249333 \cdot 10^{-90} \lor \neg \left(z \le 2.72035343737030278 \cdot 10^{-27}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r803634 = x;
        double r803635 = y;
        double r803636 = z;
        double r803637 = r803635 * r803636;
        double r803638 = r803634 - r803637;
        double r803639 = t;
        double r803640 = a;
        double r803641 = r803640 * r803636;
        double r803642 = r803639 - r803641;
        double r803643 = r803638 / r803642;
        return r803643;
}

double f(double x, double y, double z, double t, double a) {
        double r803644 = z;
        double r803645 = -2.0099085297249333e-90;
        bool r803646 = r803644 <= r803645;
        double r803647 = 2.7203534373703028e-27;
        bool r803648 = r803644 <= r803647;
        double r803649 = !r803648;
        bool r803650 = r803646 || r803649;
        double r803651 = x;
        double r803652 = t;
        double r803653 = a;
        double r803654 = r803653 * r803644;
        double r803655 = r803652 - r803654;
        double r803656 = r803651 / r803655;
        double r803657 = y;
        double r803658 = r803652 / r803644;
        double r803659 = r803658 - r803653;
        double r803660 = r803657 / r803659;
        double r803661 = r803656 - r803660;
        double r803662 = 1.0;
        double r803663 = r803657 * r803644;
        double r803664 = r803651 - r803663;
        double r803665 = r803655 / r803664;
        double r803666 = r803662 / r803665;
        double r803667 = r803650 ? r803661 : r803666;
        return r803667;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original10.8
Target1.7
Herbie1.8
\[\begin{array}{l} \mathbf{if}\;z \lt -32113435955957344:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{elif}\;z \lt 3.51395223729782958 \cdot 10^{-86}:\\ \;\;\;\;\left(x - y \cdot z\right) \cdot \frac{1}{t - a \cdot z}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -2.0099085297249333e-90 or 2.7203534373703028e-27 < z

    1. Initial program 17.9

      \[\frac{x - y \cdot z}{t - a \cdot z}\]
    2. Using strategy rm
    3. Applied div-sub17.9

      \[\leadsto \color{blue}{\frac{x}{t - a \cdot z} - \frac{y \cdot z}{t - a \cdot z}}\]
    4. Simplified11.5

      \[\leadsto \frac{x}{t - a \cdot z} - \color{blue}{y \cdot \frac{z}{t - a \cdot z}}\]
    5. Using strategy rm
    6. Applied clear-num11.6

      \[\leadsto \frac{x}{t - a \cdot z} - y \cdot \color{blue}{\frac{1}{\frac{t - a \cdot z}{z}}}\]
    7. Using strategy rm
    8. Applied pow111.6

      \[\leadsto \frac{x}{t - a \cdot z} - y \cdot \color{blue}{{\left(\frac{1}{\frac{t - a \cdot z}{z}}\right)}^{1}}\]
    9. Applied pow111.6

      \[\leadsto \frac{x}{t - a \cdot z} - \color{blue}{{y}^{1}} \cdot {\left(\frac{1}{\frac{t - a \cdot z}{z}}\right)}^{1}\]
    10. Applied pow-prod-down11.6

      \[\leadsto \frac{x}{t - a \cdot z} - \color{blue}{{\left(y \cdot \frac{1}{\frac{t - a \cdot z}{z}}\right)}^{1}}\]
    11. Simplified2.6

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

    if -2.0099085297249333e-90 < z < 2.7203534373703028e-27

    1. Initial program 0.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -2.0099085297249333 \cdot 10^{-90} \lor \neg \left(z \le 2.72035343737030278 \cdot 10^{-27}\right):\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{t - a \cdot z}{x - y \cdot z}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 
(FPCore (x y z t a)
  :name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
  :precision binary64

  :herbie-target
  (if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))

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