x \cdot \frac{\frac{y}{z} \cdot t}{t}\frac{\frac{y}{\frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{x} \cdot \sqrt[3]{x}}}}{\frac{\sqrt[3]{z}}{\sqrt[3]{x}}}double f(double x, double y, double z, double t) {
double r342005 = x;
double r342006 = y;
double r342007 = z;
double r342008 = r342006 / r342007;
double r342009 = t;
double r342010 = r342008 * r342009;
double r342011 = r342010 / r342009;
double r342012 = r342005 * r342011;
return r342012;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r342013 = y;
double r342014 = z;
double r342015 = cbrt(r342014);
double r342016 = r342015 * r342015;
double r342017 = x;
double r342018 = cbrt(r342017);
double r342019 = r342018 * r342018;
double r342020 = r342016 / r342019;
double r342021 = r342013 / r342020;
double r342022 = r342015 / r342018;
double r342023 = r342021 / r342022;
return r342023;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.5 |
|---|---|
| Target | 1.7 |
| Herbie | 2.1 |
Initial program 14.5
Simplified6.2
rmApplied div-inv6.2
Applied associate-*l*6.2
Simplified6.1
rmApplied associate-*r/6.2
rmApplied associate-/l*6.1
rmApplied add-cube-cbrt6.9
Applied add-cube-cbrt7.0
Applied times-frac7.0
Applied associate-/r*2.1
Final simplification2.1
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, B"
:precision binary64
:herbie-target
(if (< (/ (* (/ y z) t) t) -1.20672205123045005e245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.90752223693390633e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.65895442315341522e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))