\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(\mathsf{fma}\left(1, \frac{1}{t}, \frac{\frac{1}{t}}{z}\right) - 1, 2, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r24029968 = x;
double r24029969 = y;
double r24029970 = r24029968 / r24029969;
double r24029971 = 2.0;
double r24029972 = z;
double r24029973 = r24029972 * r24029971;
double r24029974 = 1.0;
double r24029975 = t;
double r24029976 = r24029974 - r24029975;
double r24029977 = r24029973 * r24029976;
double r24029978 = r24029971 + r24029977;
double r24029979 = r24029975 * r24029972;
double r24029980 = r24029978 / r24029979;
double r24029981 = r24029970 + r24029980;
return r24029981;
}
double f(double x, double y, double z, double t) {
double r24029982 = 1.0;
double r24029983 = 1.0;
double r24029984 = t;
double r24029985 = r24029983 / r24029984;
double r24029986 = z;
double r24029987 = r24029985 / r24029986;
double r24029988 = fma(r24029982, r24029985, r24029987);
double r24029989 = r24029988 - r24029983;
double r24029990 = 2.0;
double r24029991 = x;
double r24029992 = y;
double r24029993 = r24029991 / r24029992;
double r24029994 = fma(r24029989, r24029990, r24029993);
return r24029994;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.3
Simplified0.1
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x y z t)
:name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"
:herbie-target
(- (/ (+ (/ 2.0 z) 2.0) t) (- 2.0 (/ x y)))
(+ (/ x y) (/ (+ 2.0 (* (* z 2.0) (- 1.0 t))) (* t z))))