Average Error: 5.1 → 5.6
Time: 49.7s
Precision: 64
\[\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k\]
\[\mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(27.0, k \cdot j, \left(x \cdot i\right) \cdot 4.0\right)\right)\]
\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(27.0, k \cdot j, \left(x \cdot i\right) \cdot 4.0\right)\right)
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r5009988 = x;
        double r5009989 = 18.0;
        double r5009990 = r5009988 * r5009989;
        double r5009991 = y;
        double r5009992 = r5009990 * r5009991;
        double r5009993 = z;
        double r5009994 = r5009992 * r5009993;
        double r5009995 = t;
        double r5009996 = r5009994 * r5009995;
        double r5009997 = a;
        double r5009998 = 4.0;
        double r5009999 = r5009997 * r5009998;
        double r5010000 = r5009999 * r5009995;
        double r5010001 = r5009996 - r5010000;
        double r5010002 = b;
        double r5010003 = c;
        double r5010004 = r5010002 * r5010003;
        double r5010005 = r5010001 + r5010004;
        double r5010006 = r5009988 * r5009998;
        double r5010007 = i;
        double r5010008 = r5010006 * r5010007;
        double r5010009 = r5010005 - r5010008;
        double r5010010 = j;
        double r5010011 = 27.0;
        double r5010012 = r5010010 * r5010011;
        double r5010013 = k;
        double r5010014 = r5010012 * r5010013;
        double r5010015 = r5010009 - r5010014;
        return r5010015;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r5010016 = x;
        double r5010017 = 18.0;
        double r5010018 = r5010016 * r5010017;
        double r5010019 = y;
        double r5010020 = z;
        double r5010021 = r5010019 * r5010020;
        double r5010022 = r5010018 * r5010021;
        double r5010023 = a;
        double r5010024 = 4.0;
        double r5010025 = r5010023 * r5010024;
        double r5010026 = r5010022 - r5010025;
        double r5010027 = t;
        double r5010028 = b;
        double r5010029 = c;
        double r5010030 = r5010028 * r5010029;
        double r5010031 = 27.0;
        double r5010032 = k;
        double r5010033 = j;
        double r5010034 = r5010032 * r5010033;
        double r5010035 = i;
        double r5010036 = r5010016 * r5010035;
        double r5010037 = r5010036 * r5010024;
        double r5010038 = fma(r5010031, r5010034, r5010037);
        double r5010039 = r5010030 - r5010038;
        double r5010040 = fma(r5010026, r5010027, r5010039);
        return r5010040;
}

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

Bits error versus j

Bits error versus k

Derivation

  1. Initial program 5.1

    \[\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k\]
  2. Simplified5.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0, t, c \cdot b - \mathsf{fma}\left(k, 27.0 \cdot j, \left(x \cdot 4.0\right) \cdot i\right)\right)}\]
  3. Using strategy rm
  4. Applied associate-*l*5.6

    \[\leadsto \mathsf{fma}\left(\color{blue}{\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right)} - a \cdot 4.0, t, c \cdot b - \mathsf{fma}\left(k, 27.0 \cdot j, \left(x \cdot 4.0\right) \cdot i\right)\right)\]
  5. Taylor expanded around inf 5.6

    \[\leadsto \mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right) - a \cdot 4.0, t, c \cdot b - \color{blue}{\left(27.0 \cdot \left(j \cdot k\right) + 4.0 \cdot \left(i \cdot x\right)\right)}\right)\]
  6. Simplified5.6

    \[\leadsto \mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right) - a \cdot 4.0, t, c \cdot b - \color{blue}{\mathsf{fma}\left(27.0, k \cdot j, \left(x \cdot i\right) \cdot 4.0\right)}\right)\]
  7. Final simplification5.6

    \[\leadsto \mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot z\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(27.0, k \cdot j, \left(x \cdot i\right) \cdot 4.0\right)\right)\]

Reproduce

herbie shell --seed 2019134 +o rules:numerics
(FPCore (x y z t a b c i j k)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1"
  (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))