Average Error: 0.2 → 0.2
Time: 20.4s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r220798 = a;
        double r220799 = r220798 * r220798;
        double r220800 = b;
        double r220801 = r220800 * r220800;
        double r220802 = r220799 + r220801;
        double r220803 = 2.0;
        double r220804 = pow(r220802, r220803);
        double r220805 = 4.0;
        double r220806 = 1.0;
        double r220807 = r220806 + r220798;
        double r220808 = r220799 * r220807;
        double r220809 = 3.0;
        double r220810 = r220809 * r220798;
        double r220811 = r220806 - r220810;
        double r220812 = r220801 * r220811;
        double r220813 = r220808 + r220812;
        double r220814 = r220805 * r220813;
        double r220815 = r220804 + r220814;
        double r220816 = r220815 - r220806;
        return r220816;
}

double f(double a, double b) {
        double r220817 = 4.0;
        double r220818 = a;
        double r220819 = r220818 * r220818;
        double r220820 = 1.0;
        double r220821 = r220820 + r220818;
        double r220822 = b;
        double r220823 = r220822 * r220822;
        double r220824 = 3.0;
        double r220825 = r220824 * r220818;
        double r220826 = r220820 - r220825;
        double r220827 = r220823 * r220826;
        double r220828 = fma(r220819, r220821, r220827);
        double r220829 = fma(r220818, r220818, r220823);
        double r220830 = 2.0;
        double r220831 = pow(r220829, r220830);
        double r220832 = fma(r220817, r220828, r220831);
        double r220833 = r220832 - r220820;
        return r220833;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 0.2

    \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1}\]
  3. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1\]

Reproduce

herbie shell --seed 2019198 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 3.0 a)))))) 1.0))