\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\left(\frac{z}{z \cdot t - x} \cdot y - \frac{1}{\frac{t}{\frac{x}{z}} - 1}\right) + x}{1 + x}double f(double x, double y, double z, double t) {
double r531119 = x;
double r531120 = y;
double r531121 = z;
double r531122 = r531120 * r531121;
double r531123 = r531122 - r531119;
double r531124 = t;
double r531125 = r531124 * r531121;
double r531126 = r531125 - r531119;
double r531127 = r531123 / r531126;
double r531128 = r531119 + r531127;
double r531129 = 1.0;
double r531130 = r531119 + r531129;
double r531131 = r531128 / r531130;
return r531131;
}
double f(double x, double y, double z, double t) {
double r531132 = z;
double r531133 = t;
double r531134 = r531132 * r531133;
double r531135 = x;
double r531136 = r531134 - r531135;
double r531137 = r531132 / r531136;
double r531138 = y;
double r531139 = r531137 * r531138;
double r531140 = 1.0;
double r531141 = r531135 / r531132;
double r531142 = r531133 / r531141;
double r531143 = r531142 - r531140;
double r531144 = r531140 / r531143;
double r531145 = r531139 - r531144;
double r531146 = r531145 + r531135;
double r531147 = 1.0;
double r531148 = r531147 + r531135;
double r531149 = r531146 / r531148;
return r531149;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.3 |
|---|---|
| Target | 0.4 |
| Herbie | 2.5 |
Initial program 7.3
rmApplied div-sub7.3
Simplified4.9
rmApplied div-inv4.9
Applied associate-*l*2.5
Simplified2.5
rmApplied clear-num2.5
Simplified2.5
Final simplification2.5
herbie shell --seed 2019195
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1.0))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))