\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{hypot}\left(\frac{z}{t}, \frac{x}{y}\right) \cdot \mathsf{hypot}\left(\frac{z}{t}, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r716771 = x;
double r716772 = r716771 * r716771;
double r716773 = y;
double r716774 = r716773 * r716773;
double r716775 = r716772 / r716774;
double r716776 = z;
double r716777 = r716776 * r716776;
double r716778 = t;
double r716779 = r716778 * r716778;
double r716780 = r716777 / r716779;
double r716781 = r716775 + r716780;
return r716781;
}
double f(double x, double y, double z, double t) {
double r716782 = z;
double r716783 = t;
double r716784 = r716782 / r716783;
double r716785 = x;
double r716786 = y;
double r716787 = r716785 / r716786;
double r716788 = hypot(r716784, r716787);
double r716789 = r716788 * r716788;
return r716789;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
Initial program 33.3
Simplified18.8
rmApplied add-sqr-sqrt18.9
Simplified18.8
Simplified0.4
Final simplification0.4
herbie shell --seed 2020060 +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))))