Average Error: 6.3 → 1.5
Time: 7.1s
Precision: 64
\[2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)\]
\[\begin{array}{l} \mathbf{if}\;\left(a + b \cdot c\right) \cdot c \le 0.0 \lor \neg \left(\left(a + b \cdot c\right) \cdot c \le 4.96602592598902903 \cdot 10^{275}\right):\\ \;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a + b \cdot c\right) \cdot \left(c \cdot i\right)\right)\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\sqrt{\left(a + b \cdot c\right) \cdot c} \cdot \sqrt{\left(a + b \cdot c\right) \cdot c}\right) \cdot i\right)\\ \end{array}\]
2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)
\begin{array}{l}
\mathbf{if}\;\left(a + b \cdot c\right) \cdot c \le 0.0 \lor \neg \left(\left(a + b \cdot c\right) \cdot c \le 4.96602592598902903 \cdot 10^{275}\right):\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a + b \cdot c\right) \cdot \left(c \cdot i\right)\right)\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\sqrt{\left(a + b \cdot c\right) \cdot c} \cdot \sqrt{\left(a + b \cdot c\right) \cdot c}\right) \cdot i\right)\\

\end{array}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
        double r664922 = 2.0;
        double r664923 = x;
        double r664924 = y;
        double r664925 = r664923 * r664924;
        double r664926 = z;
        double r664927 = t;
        double r664928 = r664926 * r664927;
        double r664929 = r664925 + r664928;
        double r664930 = a;
        double r664931 = b;
        double r664932 = c;
        double r664933 = r664931 * r664932;
        double r664934 = r664930 + r664933;
        double r664935 = r664934 * r664932;
        double r664936 = i;
        double r664937 = r664935 * r664936;
        double r664938 = r664929 - r664937;
        double r664939 = r664922 * r664938;
        return r664939;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i) {
        double r664940 = a;
        double r664941 = b;
        double r664942 = c;
        double r664943 = r664941 * r664942;
        double r664944 = r664940 + r664943;
        double r664945 = r664944 * r664942;
        double r664946 = 0.0;
        bool r664947 = r664945 <= r664946;
        double r664948 = 4.966025925989029e+275;
        bool r664949 = r664945 <= r664948;
        double r664950 = !r664949;
        bool r664951 = r664947 || r664950;
        double r664952 = 2.0;
        double r664953 = x;
        double r664954 = y;
        double r664955 = r664953 * r664954;
        double r664956 = z;
        double r664957 = t;
        double r664958 = r664956 * r664957;
        double r664959 = r664955 + r664958;
        double r664960 = i;
        double r664961 = r664942 * r664960;
        double r664962 = r664944 * r664961;
        double r664963 = r664959 - r664962;
        double r664964 = r664952 * r664963;
        double r664965 = sqrt(r664945);
        double r664966 = r664965 * r664965;
        double r664967 = r664966 * r664960;
        double r664968 = r664959 - r664967;
        double r664969 = r664952 * r664968;
        double r664970 = r664951 ? r664964 : r664969;
        return r664970;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus i

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original6.3
Target1.9
Herbie1.5
\[2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a + b \cdot c\right) \cdot \left(c \cdot i\right)\right)\]

Derivation

  1. Split input into 2 regimes
  2. if (* (+ a (* b c)) c) < 0.0 or 4.966025925989029e+275 < (* (+ a (* b c)) c)

    1. Initial program 10.1

      \[2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)\]
    2. Using strategy rm
    3. Applied associate-*l*2.2

      \[\leadsto 2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \color{blue}{\left(a + b \cdot c\right) \cdot \left(c \cdot i\right)}\right)\]

    if 0.0 < (* (+ a (* b c)) c) < 4.966025925989029e+275

    1. Initial program 0.1

      \[2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt0.2

      \[\leadsto 2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \color{blue}{\left(\sqrt{\left(a + b \cdot c\right) \cdot c} \cdot \sqrt{\left(a + b \cdot c\right) \cdot c}\right)} \cdot i\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(a + b \cdot c\right) \cdot c \le 0.0 \lor \neg \left(\left(a + b \cdot c\right) \cdot c \le 4.96602592598902903 \cdot 10^{275}\right):\\ \;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(a + b \cdot c\right) \cdot \left(c \cdot i\right)\right)\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\sqrt{\left(a + b \cdot c\right) \cdot c} \cdot \sqrt{\left(a + b \cdot c\right) \cdot c}\right) \cdot i\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020081 
(FPCore (x y z t a b c i)
  :name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, A"
  :precision binary64

  :herbie-target
  (* 2 (- (+ (* x y) (* z t)) (* (+ a (* b c)) (* c i))))

  (* 2 (- (+ (* x y) (* z t)) (* (* (+ a (* b c)) c) i))))