Average Error: 0.1 → 0.1
Time: 25.1s
Precision: 64
\[\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)\]
\[\mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot a + \mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot \left(-\frac{1}{3}\right)\]
\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)
\mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot a + \mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot \left(-\frac{1}{3}\right)
double f(double a, double rand) {
        double r6292104 = a;
        double r6292105 = 1.0;
        double r6292106 = 3.0;
        double r6292107 = r6292105 / r6292106;
        double r6292108 = r6292104 - r6292107;
        double r6292109 = 9.0;
        double r6292110 = r6292109 * r6292108;
        double r6292111 = sqrt(r6292110);
        double r6292112 = r6292105 / r6292111;
        double r6292113 = rand;
        double r6292114 = r6292112 * r6292113;
        double r6292115 = r6292105 + r6292114;
        double r6292116 = r6292108 * r6292115;
        return r6292116;
}

double f(double a, double rand) {
        double r6292117 = 1.0;
        double r6292118 = 9.0;
        double r6292119 = a;
        double r6292120 = 3.0;
        double r6292121 = r6292117 / r6292120;
        double r6292122 = r6292119 - r6292121;
        double r6292123 = r6292118 * r6292122;
        double r6292124 = sqrt(r6292123);
        double r6292125 = r6292117 / r6292124;
        double r6292126 = rand;
        double r6292127 = fma(r6292125, r6292126, r6292117);
        double r6292128 = r6292127 * r6292119;
        double r6292129 = -r6292121;
        double r6292130 = r6292127 * r6292129;
        double r6292131 = r6292128 + r6292130;
        return r6292131;
}

Error

Bits error versus a

Bits error versus rand

Derivation

  1. Initial program 0.1

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

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

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

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

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

Reproduce

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