\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\sqrt{\left(\sqrt[3]{\frac{z}{t}} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{\frac{1}{t}}\right)\right) \cdot \left(\sqrt[3]{\frac{z}{t}} \cdot \frac{z}{t}\right) + \frac{x}{y} \cdot \frac{x}{y}} \cdot \sqrt{\frac{x}{y} \cdot \frac{x}{y} + \frac{z}{t} \cdot \frac{z}{t}}double f(double x, double y, double z, double t) {
double r28734525 = x;
double r28734526 = r28734525 * r28734525;
double r28734527 = y;
double r28734528 = r28734527 * r28734527;
double r28734529 = r28734526 / r28734528;
double r28734530 = z;
double r28734531 = r28734530 * r28734530;
double r28734532 = t;
double r28734533 = r28734532 * r28734532;
double r28734534 = r28734531 / r28734533;
double r28734535 = r28734529 + r28734534;
return r28734535;
}
double f(double x, double y, double z, double t) {
double r28734536 = z;
double r28734537 = t;
double r28734538 = r28734536 / r28734537;
double r28734539 = cbrt(r28734538);
double r28734540 = cbrt(r28734536);
double r28734541 = 1.0;
double r28734542 = r28734541 / r28734537;
double r28734543 = cbrt(r28734542);
double r28734544 = r28734540 * r28734543;
double r28734545 = r28734539 * r28734544;
double r28734546 = r28734539 * r28734538;
double r28734547 = r28734545 * r28734546;
double r28734548 = x;
double r28734549 = y;
double r28734550 = r28734548 / r28734549;
double r28734551 = r28734550 * r28734550;
double r28734552 = r28734547 + r28734551;
double r28734553 = sqrt(r28734552);
double r28734554 = r28734538 * r28734538;
double r28734555 = r28734551 + r28734554;
double r28734556 = sqrt(r28734555);
double r28734557 = r28734553 * r28734556;
return r28734557;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 32.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
Initial program 32.3
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
rmApplied div-inv0.6
Applied cbrt-prod0.6
Final simplification0.6
herbie shell --seed 2019168
(FPCore (x y z t)
:name "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1"
:herbie-target
(+ (pow (/ x y) 2) (pow (/ z t) 2))
(+ (/ (* x x) (* y y)) (/ (* z z) (* t t))))