x \cdot \left(1 - \left(1 - y\right) \cdot z\right)
\left(-\left(x \cdot z\right) \cdot \left(1 - y\right)\right) + x \cdot 1
double f(double x, double y, double z) {
double r681140 = x;
double r681141 = 1.0;
double r681142 = y;
double r681143 = r681141 - r681142;
double r681144 = z;
double r681145 = r681143 * r681144;
double r681146 = r681141 - r681145;
double r681147 = r681140 * r681146;
return r681147;
}
double f(double x, double y, double z) {
double r681148 = x;
double r681149 = z;
double r681150 = r681148 * r681149;
double r681151 = 1.0;
double r681152 = y;
double r681153 = r681151 - r681152;
double r681154 = r681150 * r681153;
double r681155 = -r681154;
double r681156 = r681148 * r681151;
double r681157 = r681155 + r681156;
return r681157;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.3 |
|---|---|
| Target | 0.2 |
| Herbie | 1.6 |
Initial program 3.3
rmApplied sub-neg3.3
Applied distribute-lft-in3.3
rmApplied distribute-rgt-neg-in3.3
Applied associate-*r*3.7
rmApplied add-cube-cbrt4.0
Applied associate-*r*4.0
rmApplied pow14.0
Applied pow14.0
Applied pow14.0
Applied pow14.0
Applied pow-prod-down4.0
Applied pow14.0
Applied pow-prod-down4.0
Applied pow-prod-down4.0
Applied pow-prod-down4.0
Simplified1.6
Final simplification1.6
herbie shell --seed 2019235
(FPCore (x y z)
:name "Data.Colour.RGBSpace.HSV:hsv from colour-2.3.3, J"
:precision binary64
:herbie-target
(if (< (* x (- 1 (* (- 1 y) z))) -1.618195973607049e50) (+ x (* (- 1 y) (* (- z) x))) (if (< (* x (- 1 (* (- 1 y) z))) 3.8922376496639029e134) (- (* (* x y) z) (- (* x z) x)) (+ x (* (- 1 y) (* (- z) x)))))
(* x (- 1 (* (- 1 y) z))))