\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\sqrt[3]{\frac{x}{y}} \cdot \sqrt[3]{\frac{x}{y}}\right)\right) \cdot \left(\sqrt[3]{\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{1}} \cdot \sqrt[3]{\frac{\sqrt[3]{x}}{y}}\right)\right)double f(double x, double y, double z, double t) {
double r576132 = x;
double r576133 = r576132 * r576132;
double r576134 = y;
double r576135 = r576134 * r576134;
double r576136 = r576133 / r576135;
double r576137 = z;
double r576138 = r576137 * r576137;
double r576139 = t;
double r576140 = r576139 * r576139;
double r576141 = r576138 / r576140;
double r576142 = r576136 + r576141;
return r576142;
}
double f(double x, double y, double z, double t) {
double r576143 = z;
double r576144 = t;
double r576145 = r576143 / r576144;
double r576146 = x;
double r576147 = y;
double r576148 = r576146 / r576147;
double r576149 = cbrt(r576148);
double r576150 = r576149 * r576149;
double r576151 = r576148 * r576150;
double r576152 = cbrt(r576146);
double r576153 = r576152 * r576152;
double r576154 = 1.0;
double r576155 = r576153 / r576154;
double r576156 = cbrt(r576155);
double r576157 = r576152 / r576147;
double r576158 = cbrt(r576157);
double r576159 = r576156 * r576158;
double r576160 = r576151 * r576159;
double r576161 = fma(r576145, r576145, r576160);
return r576161;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.8 |
Initial program 33.5
Simplified18.5
rmApplied times-frac0.4
rmApplied add-cube-cbrt0.8
Applied associate-*r*0.8
rmApplied *-un-lft-identity0.8
Applied add-cube-cbrt0.8
Applied times-frac0.8
Applied cbrt-prod0.8
Final simplification0.8
herbie shell --seed 2019353 +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))))