Average Error: 0.3 → 0.3
Time: 18.4s
Precision: 64
\[\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t\]
\[\log t \cdot \left(a - 0.5\right) + \left(\frac{{\left(\log \left(x + y\right)\right)}^{3} + {\left(\log z\right)}^{3}}{\mathsf{fma}\left(\log \left(x + y\right), \log \left(x + y\right), \log z \cdot \left(\log z - \log \left(x + y\right)\right)\right)} - t\right)\]
\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\log t \cdot \left(a - 0.5\right) + \left(\frac{{\left(\log \left(x + y\right)\right)}^{3} + {\left(\log z\right)}^{3}}{\mathsf{fma}\left(\log \left(x + y\right), \log \left(x + y\right), \log z \cdot \left(\log z - \log \left(x + y\right)\right)\right)} - t\right)
double f(double x, double y, double z, double t, double a) {
        double r345026 = x;
        double r345027 = y;
        double r345028 = r345026 + r345027;
        double r345029 = log(r345028);
        double r345030 = z;
        double r345031 = log(r345030);
        double r345032 = r345029 + r345031;
        double r345033 = t;
        double r345034 = r345032 - r345033;
        double r345035 = a;
        double r345036 = 0.5;
        double r345037 = r345035 - r345036;
        double r345038 = log(r345033);
        double r345039 = r345037 * r345038;
        double r345040 = r345034 + r345039;
        return r345040;
}

double f(double x, double y, double z, double t, double a) {
        double r345041 = t;
        double r345042 = log(r345041);
        double r345043 = a;
        double r345044 = 0.5;
        double r345045 = r345043 - r345044;
        double r345046 = r345042 * r345045;
        double r345047 = x;
        double r345048 = y;
        double r345049 = r345047 + r345048;
        double r345050 = log(r345049);
        double r345051 = 3.0;
        double r345052 = pow(r345050, r345051);
        double r345053 = z;
        double r345054 = log(r345053);
        double r345055 = pow(r345054, r345051);
        double r345056 = r345052 + r345055;
        double r345057 = r345054 - r345050;
        double r345058 = r345054 * r345057;
        double r345059 = fma(r345050, r345050, r345058);
        double r345060 = r345056 / r345059;
        double r345061 = r345060 - r345041;
        double r345062 = r345046 + r345061;
        return r345062;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original0.3
Target0.3
Herbie0.3
\[\log \left(x + y\right) + \left(\left(\log z - t\right) + \left(a - 0.5\right) \cdot \log t\right)\]

Derivation

  1. Initial program 0.3

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(a - 0.5, \log t, \left(\log \left(x + y\right) + \log z\right) - t\right)}\]
  3. Using strategy rm
  4. Applied fma-udef0.3

    \[\leadsto \color{blue}{\left(a - 0.5\right) \cdot \log t + \left(\left(\log \left(x + y\right) + \log z\right) - t\right)}\]
  5. Simplified0.3

    \[\leadsto \color{blue}{\log t \cdot \left(a - 0.5\right)} + \left(\left(\log \left(x + y\right) + \log z\right) - t\right)\]
  6. Using strategy rm
  7. Applied flip3-+0.3

    \[\leadsto \log t \cdot \left(a - 0.5\right) + \left(\color{blue}{\frac{{\left(\log \left(x + y\right)\right)}^{3} + {\left(\log z\right)}^{3}}{\log \left(x + y\right) \cdot \log \left(x + y\right) + \left(\log z \cdot \log z - \log \left(x + y\right) \cdot \log z\right)}} - t\right)\]
  8. Simplified0.3

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

    \[\leadsto \log t \cdot \left(a - 0.5\right) + \left(\frac{{\left(\log \left(x + y\right)\right)}^{3} + {\left(\log z\right)}^{3}}{\mathsf{fma}\left(\log \left(x + y\right), \log \left(x + y\right), \log z \cdot \left(\log z - \log \left(x + y\right)\right)\right)} - t\right)\]

Reproduce

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

  :herbie-target
  (+ (log (+ x y)) (+ (- (log z) t) (* (- a 0.5) (log t))))

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