Average Error: 0.1 → 0.1
Time: 36.6s
Precision: 64
\[\left(a - \frac{1.0}{3.0}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot rand\right)\]
\[\left(a - \frac{1.0}{3.0}\right) + \left(\frac{\mathsf{fma}\left(\frac{1.0}{3.0}, -1, \frac{1.0}{3.0}\right) \cdot rand}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}} + \frac{1}{\frac{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}}{a - \frac{1.0}{3.0}}}\right)\]
\left(a - \frac{1.0}{3.0}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot rand\right)
\left(a - \frac{1.0}{3.0}\right) + \left(\frac{\mathsf{fma}\left(\frac{1.0}{3.0}, -1, \frac{1.0}{3.0}\right) \cdot rand}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}} + \frac{1}{\frac{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}}{a - \frac{1.0}{3.0}}}\right)
double f(double a, double rand) {
        double r2009078 = a;
        double r2009079 = 1.0;
        double r2009080 = 3.0;
        double r2009081 = r2009079 / r2009080;
        double r2009082 = r2009078 - r2009081;
        double r2009083 = 1.0;
        double r2009084 = 9.0;
        double r2009085 = r2009084 * r2009082;
        double r2009086 = sqrt(r2009085);
        double r2009087 = r2009083 / r2009086;
        double r2009088 = rand;
        double r2009089 = r2009087 * r2009088;
        double r2009090 = r2009083 + r2009089;
        double r2009091 = r2009082 * r2009090;
        return r2009091;
}

double f(double a, double rand) {
        double r2009092 = a;
        double r2009093 = 1.0;
        double r2009094 = 3.0;
        double r2009095 = r2009093 / r2009094;
        double r2009096 = r2009092 - r2009095;
        double r2009097 = -1.0;
        double r2009098 = fma(r2009095, r2009097, r2009095);
        double r2009099 = rand;
        double r2009100 = r2009098 * r2009099;
        double r2009101 = 9.0;
        double r2009102 = r2009096 * r2009101;
        double r2009103 = sqrt(r2009102);
        double r2009104 = r2009100 / r2009103;
        double r2009105 = 1.0;
        double r2009106 = r2009103 / r2009099;
        double r2009107 = r2009106 / r2009096;
        double r2009108 = r2009105 / r2009107;
        double r2009109 = r2009104 + r2009108;
        double r2009110 = r2009096 + r2009109;
        return r2009110;
}

Error

Bits error versus a

Bits error versus rand

Derivation

  1. Initial program 0.1

    \[\left(a - \frac{1.0}{3.0}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot rand\right)\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}}, a - \frac{1.0}{3.0}, a - \frac{1.0}{3.0}\right)}\]
  3. Using strategy rm
  4. Applied fma-udef0.1

    \[\leadsto \color{blue}{\frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \left(a - \frac{1.0}{3.0}\right) + \left(a - \frac{1.0}{3.0}\right)}\]
  5. Using strategy rm
  6. Applied *-un-lft-identity0.1

    \[\leadsto \frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \left(a - \color{blue}{1 \cdot \frac{1.0}{3.0}}\right) + \left(a - \frac{1.0}{3.0}\right)\]
  7. Applied add-sqr-sqrt0.2

    \[\leadsto \frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \left(\color{blue}{\sqrt{a} \cdot \sqrt{a}} - 1 \cdot \frac{1.0}{3.0}\right) + \left(a - \frac{1.0}{3.0}\right)\]
  8. Applied prod-diff0.2

    \[\leadsto \frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \color{blue}{\left(\mathsf{fma}\left(\sqrt{a}, \sqrt{a}, -\frac{1.0}{3.0} \cdot 1\right) + \mathsf{fma}\left(-\frac{1.0}{3.0}, 1, \frac{1.0}{3.0} \cdot 1\right)\right)} + \left(a - \frac{1.0}{3.0}\right)\]
  9. Applied distribute-lft-in0.2

    \[\leadsto \color{blue}{\left(\frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \mathsf{fma}\left(\sqrt{a}, \sqrt{a}, -\frac{1.0}{3.0} \cdot 1\right) + \frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \mathsf{fma}\left(-\frac{1.0}{3.0}, 1, \frac{1.0}{3.0} \cdot 1\right)\right)} + \left(a - \frac{1.0}{3.0}\right)\]
  10. Simplified0.1

    \[\leadsto \left(\color{blue}{\frac{a - \frac{1.0}{3.0}}{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}}} + \frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot \mathsf{fma}\left(-\frac{1.0}{3.0}, 1, \frac{1.0}{3.0} \cdot 1\right)\right) + \left(a - \frac{1.0}{3.0}\right)\]
  11. Simplified0.1

    \[\leadsto \left(\frac{a - \frac{1.0}{3.0}}{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}} + \color{blue}{\frac{rand \cdot \mathsf{fma}\left(\frac{1.0}{3.0}, -1, \frac{1.0}{3.0}\right)}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}}\right) + \left(a - \frac{1.0}{3.0}\right)\]
  12. Using strategy rm
  13. Applied clear-num0.1

    \[\leadsto \left(\color{blue}{\frac{1}{\frac{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}}{a - \frac{1.0}{3.0}}}} + \frac{rand \cdot \mathsf{fma}\left(\frac{1.0}{3.0}, -1, \frac{1.0}{3.0}\right)}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}\right) + \left(a - \frac{1.0}{3.0}\right)\]
  14. Final simplification0.1

    \[\leadsto \left(a - \frac{1.0}{3.0}\right) + \left(\frac{\mathsf{fma}\left(\frac{1.0}{3.0}, -1, \frac{1.0}{3.0}\right) \cdot rand}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}} + \frac{1}{\frac{\frac{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}}{rand}}{a - \frac{1.0}{3.0}}}\right)\]

Reproduce

herbie shell --seed 2019143 +o rules:numerics
(FPCore (a rand)
  :name "Octave 3.8, oct_fill_randg"
  (* (- a (/ 1.0 3.0)) (+ 1 (* (/ 1 (sqrt (* 9 (- a (/ 1.0 3.0))))) rand))))