x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\mathsf{fma}\left(y, \log z + \left(1 - z\right), 0.5 \cdot x\right)double f(double x, double y, double z) {
double r11703205 = x;
double r11703206 = 0.5;
double r11703207 = r11703205 * r11703206;
double r11703208 = y;
double r11703209 = 1.0;
double r11703210 = z;
double r11703211 = r11703209 - r11703210;
double r11703212 = log(r11703210);
double r11703213 = r11703211 + r11703212;
double r11703214 = r11703208 * r11703213;
double r11703215 = r11703207 + r11703214;
return r11703215;
}
double f(double x, double y, double z) {
double r11703216 = y;
double r11703217 = z;
double r11703218 = log(r11703217);
double r11703219 = 1.0;
double r11703220 = r11703219 - r11703217;
double r11703221 = r11703218 + r11703220;
double r11703222 = 0.5;
double r11703223 = x;
double r11703224 = r11703222 * r11703223;
double r11703225 = fma(r11703216, r11703221, r11703224);
return r11703225;
}




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
Final simplification0.1
herbie shell --seed 2019172 +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)))))