\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \frac{\frac{z}{t}}{\frac{t}{z}}\right)double f(double x, double y, double z, double t) {
double r509731 = x;
double r509732 = r509731 * r509731;
double r509733 = y;
double r509734 = r509733 * r509733;
double r509735 = r509732 / r509734;
double r509736 = z;
double r509737 = r509736 * r509736;
double r509738 = t;
double r509739 = r509738 * r509738;
double r509740 = r509737 / r509739;
double r509741 = r509735 + r509740;
return r509741;
}
double f(double x, double y, double z, double t) {
double r509742 = x;
double r509743 = y;
double r509744 = r509742 / r509743;
double r509745 = z;
double r509746 = t;
double r509747 = r509745 / r509746;
double r509748 = r509746 / r509745;
double r509749 = r509747 / r509748;
double r509750 = fma(r509744, r509744, r509749);
return r509750;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.6 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
Initial program 33.6
Simplified18.7
rmApplied associate-/l*12.9
Simplified3.9
rmApplied associate-/r*0.4
Final simplification0.4
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1"
:precision binary64
:herbie-target
(+ (pow (/ x y) 2) (pow (/ z t) 2))
(+ (/ (* x x) (* y y)) (/ (* z z) (* t t))))