Average Error: 6.5 → 0.4
Time: 50.7s
Precision: 64
\[\left(\left(x - 1.0\right) \cdot \log y + \left(z - 1.0\right) \cdot \log \left(1.0 - y\right)\right) - t\]
\[\mathsf{fma}\left(x - 1.0, \log y, \left(\log 1.0 - \mathsf{fma}\left(\frac{y}{1.0} \cdot \frac{y}{1.0}, \frac{1}{2}, y \cdot 1.0\right)\right) \cdot \left(z - 1.0\right)\right) - t\]
\left(\left(x - 1.0\right) \cdot \log y + \left(z - 1.0\right) \cdot \log \left(1.0 - y\right)\right) - t
\mathsf{fma}\left(x - 1.0, \log y, \left(\log 1.0 - \mathsf{fma}\left(\frac{y}{1.0} \cdot \frac{y}{1.0}, \frac{1}{2}, y \cdot 1.0\right)\right) \cdot \left(z - 1.0\right)\right) - t
double f(double x, double y, double z, double t) {
        double r3133286 = x;
        double r3133287 = 1.0;
        double r3133288 = r3133286 - r3133287;
        double r3133289 = y;
        double r3133290 = log(r3133289);
        double r3133291 = r3133288 * r3133290;
        double r3133292 = z;
        double r3133293 = r3133292 - r3133287;
        double r3133294 = r3133287 - r3133289;
        double r3133295 = log(r3133294);
        double r3133296 = r3133293 * r3133295;
        double r3133297 = r3133291 + r3133296;
        double r3133298 = t;
        double r3133299 = r3133297 - r3133298;
        return r3133299;
}

double f(double x, double y, double z, double t) {
        double r3133300 = x;
        double r3133301 = 1.0;
        double r3133302 = r3133300 - r3133301;
        double r3133303 = y;
        double r3133304 = log(r3133303);
        double r3133305 = log(r3133301);
        double r3133306 = r3133303 / r3133301;
        double r3133307 = r3133306 * r3133306;
        double r3133308 = 0.5;
        double r3133309 = r3133303 * r3133301;
        double r3133310 = fma(r3133307, r3133308, r3133309);
        double r3133311 = r3133305 - r3133310;
        double r3133312 = z;
        double r3133313 = r3133312 - r3133301;
        double r3133314 = r3133311 * r3133313;
        double r3133315 = fma(r3133302, r3133304, r3133314);
        double r3133316 = t;
        double r3133317 = r3133315 - r3133316;
        return r3133317;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Derivation

  1. Initial program 6.5

    \[\left(\left(x - 1.0\right) \cdot \log y + \left(z - 1.0\right) \cdot \log \left(1.0 - y\right)\right) - t\]
  2. Simplified6.5

    \[\leadsto \color{blue}{\mathsf{fma}\left(x - 1.0, \log y, \log \left(1.0 - y\right) \cdot \left(z - 1.0\right)\right) - t}\]
  3. Taylor expanded around 0 0.4

    \[\leadsto \mathsf{fma}\left(x - 1.0, \log y, \color{blue}{\left(\log 1.0 - \left(1.0 \cdot y + \frac{1}{2} \cdot \frac{{y}^{2}}{{1.0}^{2}}\right)\right)} \cdot \left(z - 1.0\right)\right) - t\]
  4. Simplified0.4

    \[\leadsto \mathsf{fma}\left(x - 1.0, \log y, \color{blue}{\left(\log 1.0 - \mathsf{fma}\left(\frac{y}{1.0} \cdot \frac{y}{1.0}, \frac{1}{2}, 1.0 \cdot y\right)\right)} \cdot \left(z - 1.0\right)\right) - t\]
  5. Final simplification0.4

    \[\leadsto \mathsf{fma}\left(x - 1.0, \log y, \left(\log 1.0 - \mathsf{fma}\left(\frac{y}{1.0} \cdot \frac{y}{1.0}, \frac{1}{2}, y \cdot 1.0\right)\right) \cdot \left(z - 1.0\right)\right) - t\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t)
  :name "Statistics.Distribution.Beta:$cdensity from math-functions-0.1.5.2"
  (- (+ (* (- x 1.0) (log y)) (* (- z 1.0) (log (- 1.0 y)))) t))