\frac{x + y \cdot \left(z - x\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le 8.509729486679155842541870672204874453908 \cdot 10^{45} \lor \neg \left(z \le 2.771023612321592625881472298763729634882 \cdot 10^{231}\right):\\
\;\;\;\;y + \frac{x - y \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\left({y}^{2} + y\right) \cdot \frac{z}{x} + \frac{z}{x}} + y\\
\end{array}double f(double x, double y, double z) {
double r697303 = x;
double r697304 = y;
double r697305 = z;
double r697306 = r697305 - r697303;
double r697307 = r697304 * r697306;
double r697308 = r697303 + r697307;
double r697309 = r697308 / r697305;
return r697309;
}
double f(double x, double y, double z) {
double r697310 = z;
double r697311 = 8.509729486679156e+45;
bool r697312 = r697310 <= r697311;
double r697313 = 2.7710236123215926e+231;
bool r697314 = r697310 <= r697313;
double r697315 = !r697314;
bool r697316 = r697312 || r697315;
double r697317 = y;
double r697318 = x;
double r697319 = r697317 * r697318;
double r697320 = r697318 - r697319;
double r697321 = r697320 / r697310;
double r697322 = r697317 + r697321;
double r697323 = 1.0;
double r697324 = 2.0;
double r697325 = pow(r697317, r697324);
double r697326 = r697325 + r697317;
double r697327 = r697310 / r697318;
double r697328 = r697326 * r697327;
double r697329 = r697328 + r697327;
double r697330 = r697323 / r697329;
double r697331 = r697330 + r697317;
double r697332 = r697316 ? r697322 : r697331;
return r697332;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.5 |
|---|---|
| Target | 0.0 |
| Herbie | 4.4 |
if z < 8.509729486679156e+45 or 2.7710236123215926e+231 < z Initial program 9.3
Simplified3.0
if 8.509729486679156e+45 < z < 2.7710236123215926e+231Initial program 15.9
Simplified5.4
rmApplied clear-num5.5
Taylor expanded around 0 17.6
Simplified21.9
rmApplied associate-+l+21.9
Simplified11.3
Final simplification4.4
herbie shell --seed 2019179
(FPCore (x y z)
:name "Diagrams.Backend.Rasterific:rasterificRadialGradient from diagrams-rasterific-1.3.1.3"
:herbie-target
(- (+ y (/ x z)) (/ y (/ z x)))
(/ (+ x (* y (- z x))) z))