Average Error: 5.6 → 2.9
Time: 11.4s
Precision: 64
\[x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\]
\[\begin{array}{l} \mathbf{if}\;z \cdot z \le 1.434062985694346791901718650963140330261 \cdot 10^{307}:\\ \;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot x - \left(\left(z + \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right) \cdot \left(z - \sqrt{t}\right)\\ \end{array}\]
x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\begin{array}{l}
\mathbf{if}\;z \cdot z \le 1.434062985694346791901718650963140330261 \cdot 10^{307}:\\
\;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\

\mathbf{else}:\\
\;\;\;\;x \cdot x - \left(\left(z + \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right) \cdot \left(z - \sqrt{t}\right)\\

\end{array}
double f(double x, double y, double z, double t) {
        double r497849 = x;
        double r497850 = r497849 * r497849;
        double r497851 = y;
        double r497852 = 4.0;
        double r497853 = r497851 * r497852;
        double r497854 = z;
        double r497855 = r497854 * r497854;
        double r497856 = t;
        double r497857 = r497855 - r497856;
        double r497858 = r497853 * r497857;
        double r497859 = r497850 - r497858;
        return r497859;
}

double f(double x, double y, double z, double t) {
        double r497860 = z;
        double r497861 = r497860 * r497860;
        double r497862 = 1.4340629856943468e+307;
        bool r497863 = r497861 <= r497862;
        double r497864 = x;
        double r497865 = r497864 * r497864;
        double r497866 = y;
        double r497867 = 4.0;
        double r497868 = r497866 * r497867;
        double r497869 = t;
        double r497870 = r497861 - r497869;
        double r497871 = r497868 * r497870;
        double r497872 = r497865 - r497871;
        double r497873 = sqrt(r497869);
        double r497874 = r497860 + r497873;
        double r497875 = r497874 * r497868;
        double r497876 = r497860 - r497873;
        double r497877 = r497875 * r497876;
        double r497878 = r497865 - r497877;
        double r497879 = r497863 ? r497872 : r497878;
        return r497879;
}

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

Original5.6
Target5.6
Herbie2.9
\[x \cdot x - 4 \cdot \left(y \cdot \left(z \cdot z - t\right)\right)\]

Derivation

  1. Split input into 2 regimes
  2. if (* z z) < 1.4340629856943468e+307

    1. Initial program 0.1

      \[x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\]

    if 1.4340629856943468e+307 < (* z z)

    1. Initial program 63.7

      \[x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt63.8

      \[\leadsto x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - \color{blue}{\sqrt{t} \cdot \sqrt{t}}\right)\]
    4. Applied difference-of-squares63.8

      \[\leadsto x \cdot x - \left(y \cdot 4\right) \cdot \color{blue}{\left(\left(z + \sqrt{t}\right) \cdot \left(z - \sqrt{t}\right)\right)}\]
    5. Applied associate-*r*31.9

      \[\leadsto x \cdot x - \color{blue}{\left(\left(y \cdot 4\right) \cdot \left(z + \sqrt{t}\right)\right) \cdot \left(z - \sqrt{t}\right)}\]
    6. Simplified31.9

      \[\leadsto x \cdot x - \color{blue}{\left(\left(z + \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right)} \cdot \left(z - \sqrt{t}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification2.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \cdot z \le 1.434062985694346791901718650963140330261 \cdot 10^{307}:\\ \;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot x - \left(\left(z + \sqrt{t}\right) \cdot \left(y \cdot 4\right)\right) \cdot \left(z - \sqrt{t}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019209 
(FPCore (x y z t)
  :name "Graphics.Rasterific.Shading:$sradialGradientWithFocusShader from Rasterific-0.6.1, B"
  :precision binary64

  :herbie-target
  (- (* x x) (* 4 (* y (- (* z z) t))))

  (- (* x x) (* (* y 4) (- (* z z) t))))