Average Error: 6.1 → 3.3
Time: 5.1s
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 5.6499424326614904 \cdot 10^{293}:\\ \;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot x - \left(\left(y \cdot 4\right) \cdot \left(z + \sqrt{t}\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 5.6499424326614904 \cdot 10^{293}:\\
\;\;\;\;x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r882216 = x;
        double r882217 = r882216 * r882216;
        double r882218 = y;
        double r882219 = 4.0;
        double r882220 = r882218 * r882219;
        double r882221 = z;
        double r882222 = r882221 * r882221;
        double r882223 = t;
        double r882224 = r882222 - r882223;
        double r882225 = r882220 * r882224;
        double r882226 = r882217 - r882225;
        return r882226;
}

double f(double x, double y, double z, double t) {
        double r882227 = z;
        double r882228 = r882227 * r882227;
        double r882229 = 5.6499424326614904e+293;
        bool r882230 = r882228 <= r882229;
        double r882231 = x;
        double r882232 = r882231 * r882231;
        double r882233 = y;
        double r882234 = 4.0;
        double r882235 = r882233 * r882234;
        double r882236 = t;
        double r882237 = r882228 - r882236;
        double r882238 = r882235 * r882237;
        double r882239 = r882232 - r882238;
        double r882240 = sqrt(r882236);
        double r882241 = r882227 + r882240;
        double r882242 = r882235 * r882241;
        double r882243 = r882227 - r882240;
        double r882244 = r882242 * r882243;
        double r882245 = r882232 - r882244;
        double r882246 = r882230 ? r882239 : r882245;
        return r882246;
}

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

Original6.1
Target6.1
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) < 5.6499424326614904e+293

    1. Initial program 0.1

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

    if 5.6499424326614904e+293 < (* z z)

    1. Initial program 59.7

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

      \[\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-squares62.0

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

      \[\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.3

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

Reproduce

herbie shell --seed 2020025 +o rules:numerics
(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))))