Average Error: 9.3 → 0.1
Time: 14.7s
Precision: 64
\[\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)\]
\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;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original9.3
Target0.1
Herbie0.1
\[\frac{\frac{2}{z} + 2}{t} - \left(2 - \frac{x}{y}\right)\]

Derivation

  1. Initial program 9.3

    \[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\mathsf{fma}\left(z, 1, 1\right)}{t \cdot z} - 1, 2, \frac{x}{y}\right)}\]
  3. Taylor expanded around 0 0.1

    \[\leadsto \mathsf{fma}\left(\color{blue}{\left(1 \cdot \frac{1}{t} + \frac{1}{t \cdot z}\right)} - 1, 2, \frac{x}{y}\right)\]
  4. Simplified0.1

    \[\leadsto \mathsf{fma}\left(\color{blue}{\mathsf{fma}\left(1, \frac{1}{t}, \frac{\frac{1}{t}}{z}\right)} - 1, 2, \frac{x}{y}\right)\]
  5. Final simplification0.1

    \[\leadsto \mathsf{fma}\left(\mathsf{fma}\left(1, \frac{1}{t}, \frac{\frac{1}{t}}{z}\right) - 1, 2, \frac{x}{y}\right)\]

Reproduce

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))))