Average Error: 0.3 → 0.3
Time: 10.9s
Precision: 64
\[\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t\]
\[\log \left(x + y\right) + \mathsf{fma}\left(\log t, a - 0.5, \log z - t\right)\]
\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\log \left(x + y\right) + \mathsf{fma}\left(\log t, a - 0.5, \log z - t\right)
double f(double x, double y, double z, double t, double a) {
        double r320143 = x;
        double r320144 = y;
        double r320145 = r320143 + r320144;
        double r320146 = log(r320145);
        double r320147 = z;
        double r320148 = log(r320147);
        double r320149 = r320146 + r320148;
        double r320150 = t;
        double r320151 = r320149 - r320150;
        double r320152 = a;
        double r320153 = 0.5;
        double r320154 = r320152 - r320153;
        double r320155 = log(r320150);
        double r320156 = r320154 * r320155;
        double r320157 = r320151 + r320156;
        return r320157;
}

double f(double x, double y, double z, double t, double a) {
        double r320158 = x;
        double r320159 = y;
        double r320160 = r320158 + r320159;
        double r320161 = log(r320160);
        double r320162 = t;
        double r320163 = log(r320162);
        double r320164 = a;
        double r320165 = 0.5;
        double r320166 = r320164 - r320165;
        double r320167 = z;
        double r320168 = log(r320167);
        double r320169 = r320168 - r320162;
        double r320170 = fma(r320163, r320166, r320169);
        double r320171 = r320161 + r320170;
        return r320171;
}

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. Using strategy rm
  3. Applied associate--l+0.3

    \[\leadsto \color{blue}{\left(\log \left(x + y\right) + \left(\log z - t\right)\right)} + \left(a - 0.5\right) \cdot \log t\]
  4. Applied associate-+l+0.3

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

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

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

Reproduce

herbie shell --seed 2020002 +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))))