Average Error: 5.9 → 3.3
Time: 12.7s
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 4.012940309661976867141675654509420293463 \cdot 10^{304}:\\ \;\;\;\;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 4.012940309661976867141675654509420293463 \cdot 10^{304}:\\
\;\;\;\;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 r563713 = x;
        double r563714 = r563713 * r563713;
        double r563715 = y;
        double r563716 = 4.0;
        double r563717 = r563715 * r563716;
        double r563718 = z;
        double r563719 = r563718 * r563718;
        double r563720 = t;
        double r563721 = r563719 - r563720;
        double r563722 = r563717 * r563721;
        double r563723 = r563714 - r563722;
        return r563723;
}

double f(double x, double y, double z, double t) {
        double r563724 = z;
        double r563725 = r563724 * r563724;
        double r563726 = 4.012940309661977e+304;
        bool r563727 = r563725 <= r563726;
        double r563728 = x;
        double r563729 = r563728 * r563728;
        double r563730 = y;
        double r563731 = 4.0;
        double r563732 = r563730 * r563731;
        double r563733 = t;
        double r563734 = r563725 - r563733;
        double r563735 = r563732 * r563734;
        double r563736 = r563729 - r563735;
        double r563737 = sqrt(r563733);
        double r563738 = r563724 + r563737;
        double r563739 = r563738 * r563732;
        double r563740 = r563724 - r563737;
        double r563741 = r563739 * r563740;
        double r563742 = r563729 - r563741;
        double r563743 = r563727 ? r563736 : r563742;
        return r563743;
}

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.9
Target5.9
Herbie3.3
\[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) < 4.012940309661977e+304

    1. Initial program 0.1

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

    if 4.012940309661977e+304 < (* z z)

    1. Initial program 62.5

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

      \[\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.4

      \[\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*34.3

      \[\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. Simplified34.3

      \[\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 simplification3.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \cdot z \le 4.012940309661976867141675654509420293463 \cdot 10^{304}:\\ \;\;\;\;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 2019212 
(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))))