Average Error: 24.4 → 7.6
Time: 6.1s
Precision: 64
\[x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\]
\[\begin{array}{l} \mathbf{if}\;a \le -1.997200158359207055640366838639272862727 \cdot 10^{-203} \lor \neg \left(a \le 9.06991007608417839599632409407686821888 \cdot 10^{-181}\right):\\ \;\;\;\;\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \frac{y - z}{a - z}\right) + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\ \end{array}\]
x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}
\begin{array}{l}
\mathbf{if}\;a \le -1.997200158359207055640366838639272862727 \cdot 10^{-203} \lor \neg \left(a \le 9.06991007608417839599632409407686821888 \cdot 10^{-181}\right):\\
\;\;\;\;\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \frac{y - z}{a - z}\right) + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r769702 = x;
        double r769703 = y;
        double r769704 = z;
        double r769705 = r769703 - r769704;
        double r769706 = t;
        double r769707 = r769706 - r769702;
        double r769708 = r769705 * r769707;
        double r769709 = a;
        double r769710 = r769709 - r769704;
        double r769711 = r769708 / r769710;
        double r769712 = r769702 + r769711;
        return r769712;
}

double f(double x, double y, double z, double t, double a) {
        double r769713 = a;
        double r769714 = -1.997200158359207e-203;
        bool r769715 = r769713 <= r769714;
        double r769716 = 9.069910076084178e-181;
        bool r769717 = r769713 <= r769716;
        double r769718 = !r769717;
        bool r769719 = r769715 || r769718;
        double r769720 = t;
        double r769721 = cbrt(r769720);
        double r769722 = r769721 * r769721;
        double r769723 = y;
        double r769724 = z;
        double r769725 = r769723 - r769724;
        double r769726 = r769713 - r769724;
        double r769727 = r769725 / r769726;
        double r769728 = r769721 * r769727;
        double r769729 = r769722 * r769728;
        double r769730 = x;
        double r769731 = -r769730;
        double r769732 = fma(r769731, r769727, r769730);
        double r769733 = r769729 + r769732;
        double r769734 = r769730 / r769724;
        double r769735 = r769720 / r769724;
        double r769736 = r769734 - r769735;
        double r769737 = fma(r769723, r769736, r769720);
        double r769738 = r769719 ? r769733 : r769737;
        return r769738;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original24.4
Target11.9
Herbie7.6
\[\begin{array}{l} \mathbf{if}\;z \lt -1.253613105609503593846459977496550767343 \cdot 10^{188}:\\ \;\;\;\;t - \frac{y}{z} \cdot \left(t - x\right)\\ \mathbf{elif}\;z \lt 4.446702369113811028051510715777703865332 \cdot 10^{64}:\\ \;\;\;\;x + \frac{y - z}{\frac{a - z}{t - x}}\\ \mathbf{else}:\\ \;\;\;\;t - \frac{y}{z} \cdot \left(t - x\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -1.997200158359207e-203 or 9.069910076084178e-181 < a

    1. Initial program 23.1

      \[x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\]
    2. Simplified9.9

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)}\]
    3. Using strategy rm
    4. Applied fma-udef9.9

      \[\leadsto \color{blue}{\frac{y - z}{a - z} \cdot \left(t - x\right) + x}\]
    5. Using strategy rm
    6. Applied sub-neg9.9

      \[\leadsto \frac{y - z}{a - z} \cdot \color{blue}{\left(t + \left(-x\right)\right)} + x\]
    7. Applied distribute-rgt-in9.9

      \[\leadsto \color{blue}{\left(t \cdot \frac{y - z}{a - z} + \left(-x\right) \cdot \frac{y - z}{a - z}\right)} + x\]
    8. Applied associate-+l+6.5

      \[\leadsto \color{blue}{t \cdot \frac{y - z}{a - z} + \left(\left(-x\right) \cdot \frac{y - z}{a - z} + x\right)}\]
    9. Simplified6.5

      \[\leadsto t \cdot \frac{y - z}{a - z} + \color{blue}{\mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)}\]
    10. Using strategy rm
    11. Applied add-cube-cbrt7.1

      \[\leadsto \color{blue}{\left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \sqrt[3]{t}\right)} \cdot \frac{y - z}{a - z} + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\]
    12. Applied associate-*l*7.1

      \[\leadsto \color{blue}{\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \frac{y - z}{a - z}\right)} + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\]

    if -1.997200158359207e-203 < a < 9.069910076084178e-181

    1. Initial program 31.1

      \[x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\]
    2. Simplified21.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)}\]
    3. Taylor expanded around inf 11.9

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification7.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.997200158359207055640366838639272862727 \cdot 10^{-203} \lor \neg \left(a \le 9.06991007608417839599632409407686821888 \cdot 10^{-181}\right):\\ \;\;\;\;\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \frac{y - z}{a - z}\right) + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019362 +o rules:numerics
(FPCore (x y z t a)
  :name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
  :precision binary64

  :herbie-target
  (if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))

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