\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\begin{array}{l}
\mathbf{if}\;z \le 8.355733002062013515976805283223099997005 \cdot 10^{99}:\\
\;\;\;\;\left(\left(\mathsf{fma}\left(x, y, z\right) - \frac{x}{1 - \frac{z}{x \cdot y}} \cdot y\right) - 1\right) + \frac{z \cdot z}{x \cdot y - z}\\
\mathbf{else}:\\
\;\;\;\;\left(\mathsf{fma}\left(x, y, z\right) - \frac{x}{\frac{1 - \frac{z}{x \cdot y}}{y}}\right) - 1\\
\end{array}double f(double x, double y, double z) {
double r51369 = x;
double r51370 = y;
double r51371 = z;
double r51372 = fma(r51369, r51370, r51371);
double r51373 = 1.0;
double r51374 = r51369 * r51370;
double r51375 = r51374 + r51371;
double r51376 = r51373 + r51375;
double r51377 = r51372 - r51376;
return r51377;
}
double f(double x, double y, double z) {
double r51378 = z;
double r51379 = 8.355733002062014e+99;
bool r51380 = r51378 <= r51379;
double r51381 = x;
double r51382 = y;
double r51383 = fma(r51381, r51382, r51378);
double r51384 = 1.0;
double r51385 = r51381 * r51382;
double r51386 = r51378 / r51385;
double r51387 = r51384 - r51386;
double r51388 = r51381 / r51387;
double r51389 = r51388 * r51382;
double r51390 = r51383 - r51389;
double r51391 = 1.0;
double r51392 = r51390 - r51391;
double r51393 = r51378 * r51378;
double r51394 = r51385 - r51378;
double r51395 = r51393 / r51394;
double r51396 = r51392 + r51395;
double r51397 = r51387 / r51382;
double r51398 = r51381 / r51397;
double r51399 = r51383 - r51398;
double r51400 = r51399 - r51391;
double r51401 = r51380 ? r51396 : r51400;
return r51401;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.1 |
|---|---|
| Target | 0 |
| Herbie | 31.4 |
if z < 8.355733002062014e+99Initial program 41.8
rmApplied flip-+42.4
rmApplied div-sub42.4
Applied associate-+r-42.4
Applied associate--r-42.4
Simplified30.7
rmApplied associate-/r/26.1
if 8.355733002062014e+99 < z Initial program 62.2
rmApplied flip-+63.7
rmApplied div-sub63.7
Applied associate-+r-63.7
Applied associate--r-63.7
Simplified63.3
Taylor expanded around 0 59.3
Final simplification31.4
herbie shell --seed 2019325
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))