Average Error: 0.1 → 0.1
Time: 13.4s
Precision: 64
\[\left(\left(\left(x + y\right) + z\right) - z \cdot \log t\right) + \left(a - 0.5\right) \cdot b\]
\[\mathsf{fma}\left(1 - \log t, z, \mathsf{fma}\left(a - 0.5, b, x\right)\right) + y\]
\left(\left(\left(x + y\right) + z\right) - z \cdot \log t\right) + \left(a - 0.5\right) \cdot b
\mathsf{fma}\left(1 - \log t, z, \mathsf{fma}\left(a - 0.5, b, x\right)\right) + y
double f(double x, double y, double z, double t, double a, double b) {
        double r434286 = x;
        double r434287 = y;
        double r434288 = r434286 + r434287;
        double r434289 = z;
        double r434290 = r434288 + r434289;
        double r434291 = t;
        double r434292 = log(r434291);
        double r434293 = r434289 * r434292;
        double r434294 = r434290 - r434293;
        double r434295 = a;
        double r434296 = 0.5;
        double r434297 = r434295 - r434296;
        double r434298 = b;
        double r434299 = r434297 * r434298;
        double r434300 = r434294 + r434299;
        return r434300;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r434301 = 1.0;
        double r434302 = t;
        double r434303 = log(r434302);
        double r434304 = r434301 - r434303;
        double r434305 = z;
        double r434306 = a;
        double r434307 = 0.5;
        double r434308 = r434306 - r434307;
        double r434309 = b;
        double r434310 = x;
        double r434311 = fma(r434308, r434309, r434310);
        double r434312 = fma(r434304, r434305, r434311);
        double r434313 = y;
        double r434314 = r434312 + r434313;
        return r434314;
}

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

Target

Original0.1
Target0.4
Herbie0.1
\[\left(\left(x + y\right) + \frac{\left(1 - {\left(\log t\right)}^{2}\right) \cdot z}{1 + \log t}\right) + \left(a - 0.5\right) \cdot b\]

Derivation

  1. Initial program 0.1

    \[\left(\left(\left(x + y\right) + z\right) - z \cdot \log t\right) + \left(a - 0.5\right) \cdot b\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(1 - \log t, z, \mathsf{fma}\left(a - 0.5, b, x\right)\right) + y}\]
  3. Final simplification0.1

    \[\leadsto \mathsf{fma}\left(1 - \log t, z, \mathsf{fma}\left(a - 0.5, b, x\right)\right) + y\]

Reproduce

herbie shell --seed 2020047 +o rules:numerics
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:logBeta from math-functions-0.1.5.2, A"
  :precision binary64

  :herbie-target
  (+ (+ (+ x y) (/ (* (- 1 (pow (log t) 2)) z) (+ 1 (log t)))) (* (- a 0.5) b))

  (+ (- (+ (+ x y) z) (* z (log t))) (* (- a 0.5) b)))