Average Error: 0.1 → 0.1
Time: 34.3s
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{\frac{rand}{\sqrt{a - \frac{1}{3}}}}{\sqrt{9}}, a - \frac{1}{3}, a - \frac{1}{3}\right) \cdot 1\]
\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{\frac{rand}{\sqrt{a - \frac{1}{3}}}}{\sqrt{9}}, a - \frac{1}{3}, a - \frac{1}{3}\right) \cdot 1
double f(double a, double rand) {
        double r3084307 = a;
        double r3084308 = 1.0;
        double r3084309 = 3.0;
        double r3084310 = r3084308 / r3084309;
        double r3084311 = r3084307 - r3084310;
        double r3084312 = 9.0;
        double r3084313 = r3084312 * r3084311;
        double r3084314 = sqrt(r3084313);
        double r3084315 = r3084308 / r3084314;
        double r3084316 = rand;
        double r3084317 = r3084315 * r3084316;
        double r3084318 = r3084308 + r3084317;
        double r3084319 = r3084311 * r3084318;
        return r3084319;
}

double f(double a, double rand) {
        double r3084320 = rand;
        double r3084321 = a;
        double r3084322 = 1.0;
        double r3084323 = 3.0;
        double r3084324 = r3084322 / r3084323;
        double r3084325 = r3084321 - r3084324;
        double r3084326 = sqrt(r3084325);
        double r3084327 = r3084320 / r3084326;
        double r3084328 = 9.0;
        double r3084329 = sqrt(r3084328);
        double r3084330 = r3084327 / r3084329;
        double r3084331 = fma(r3084330, r3084325, r3084325);
        double r3084332 = r3084331 * r3084322;
        return r3084332;
}

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{rand}{\sqrt{\left(a - \frac{1}{3}\right) \cdot 9}}, a - \frac{1}{3}, a - \frac{1}{3}\right) \cdot 1}\]
  3. Using strategy rm
  4. Applied sqrt-prod0.1

    \[\leadsto \mathsf{fma}\left(\frac{rand}{\color{blue}{\sqrt{a - \frac{1}{3}} \cdot \sqrt{9}}}, a - \frac{1}{3}, a - \frac{1}{3}\right) \cdot 1\]
  5. Applied associate-/r*0.1

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

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

Reproduce

herbie shell --seed 2019170 +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))))