Average Error: 49.1 → 0
Time: 1.6s
Precision: 64
\[1.7 \cdot 10^{+308} \cdot t - 1.7 \cdot 10^{+308}\]
\[(\left( 1.7 \cdot 10^{+308} \right) \cdot t + \left(-1.7 \cdot 10^{+308}\right))_*\]
double f(double t) {
        double r5692516 = 1.7e+308;
        double r5692517 = t;
        double r5692518 = r5692516 * r5692517;
        double r5692519 = r5692518 - r5692516;
        return r5692519;
}

double f(double t) {
        double r5692520 = 1.7e+308;
        double r5692521 = t;
        double r5692522 = -r5692520;
        double r5692523 = fma(r5692520, r5692521, r5692522);
        return r5692523;
}

1.7 \cdot 10^{+308} \cdot t - 1.7 \cdot 10^{+308}
(\left( 1.7 \cdot 10^{+308} \right) \cdot t + \left(-1.7 \cdot 10^{+308}\right))_*

Error

Bits error versus t

Target

Original49.1
Target0
Herbie0
\[(\left( 1.7 \cdot 10^{+308} \right) \cdot t + \left(-1.7 \cdot 10^{+308}\right))_*\]

Derivation

  1. Initial program 49.1

    \[1.7 \cdot 10^{+308} \cdot t - 1.7 \cdot 10^{+308}\]
  2. Using strategy rm
  3. Applied fma-neg0

    \[\leadsto \color{blue}{(\left( 1.7 \cdot 10^{+308} \right) \cdot t + \left(-1.7 \cdot 10^{+308}\right))_*}\]
  4. Final simplification0

    \[\leadsto (\left( 1.7 \cdot 10^{+308} \right) \cdot t + \left(-1.7 \cdot 10^{+308}\right))_*\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (t)
  :name "fma_test2"
  :pre (<= 1.9 t 2.1)

  :herbie-target
  (fma 1.7e+308 t (- 1.7e+308))

  (- (* 1.7e+308 t) 1.7e+308))