x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\mathsf{fma}\left(x, 0.5, y \cdot 1 + \left(\left(\log \left(\sqrt[3]{z}\right) - z\right) \cdot y + y \cdot \log \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right)double f(double x, double y, double z) {
double r14572383 = x;
double r14572384 = 0.5;
double r14572385 = r14572383 * r14572384;
double r14572386 = y;
double r14572387 = 1.0;
double r14572388 = z;
double r14572389 = r14572387 - r14572388;
double r14572390 = log(r14572388);
double r14572391 = r14572389 + r14572390;
double r14572392 = r14572386 * r14572391;
double r14572393 = r14572385 + r14572392;
return r14572393;
}
double f(double x, double y, double z) {
double r14572394 = x;
double r14572395 = 0.5;
double r14572396 = y;
double r14572397 = 1.0;
double r14572398 = r14572396 * r14572397;
double r14572399 = z;
double r14572400 = cbrt(r14572399);
double r14572401 = log(r14572400);
double r14572402 = r14572401 - r14572399;
double r14572403 = r14572402 * r14572396;
double r14572404 = r14572400 * r14572400;
double r14572405 = log(r14572404);
double r14572406 = r14572396 * r14572405;
double r14572407 = r14572403 + r14572406;
double r14572408 = r14572398 + r14572407;
double r14572409 = fma(r14572394, r14572395, r14572408);
return r14572409;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied associate--r+0.1
Simplified0.1
Taylor expanded around 0 0.2
Simplified0.1
rmApplied associate--l+0.1
Applied distribute-lft-in0.1
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied associate--l+0.1
Applied distribute-rgt-in0.1
Final simplification0.1
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z)
:name "System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2"
:herbie-target
(- (+ y (* 0.5 x)) (* y (- z (log z))))
(+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))