Average Error: 0.1 → 0.1
Time: 4.2m
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)\]
\[\frac{rand}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}} \cdot \left(a - \frac{1.0}{3.0}\right) + \left(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)
\frac{rand}{\sqrt{\left(a - \frac{1.0}{3.0}\right) \cdot 9}} \cdot \left(a - \frac{1.0}{3.0}\right) + \left(a - \frac{1.0}{3.0}\right)
double f(double a, double rand) {
        double r13796623 = a;
        double r13796624 = 1.0;
        double r13796625 = 3.0;
        double r13796626 = r13796624 / r13796625;
        double r13796627 = r13796623 - r13796626;
        double r13796628 = 1.0;
        double r13796629 = 9.0;
        double r13796630 = r13796629 * r13796627;
        double r13796631 = sqrt(r13796630);
        double r13796632 = r13796628 / r13796631;
        double r13796633 = rand;
        double r13796634 = r13796632 * r13796633;
        double r13796635 = r13796628 + r13796634;
        double r13796636 = r13796627 * r13796635;
        return r13796636;
}

double f(double a, double rand) {
        double r13796637 = rand;
        double r13796638 = a;
        double r13796639 = 1.0;
        double r13796640 = 3.0;
        double r13796641 = r13796639 / r13796640;
        double r13796642 = r13796638 - r13796641;
        double r13796643 = 9.0;
        double r13796644 = r13796642 * r13796643;
        double r13796645 = sqrt(r13796644);
        double r13796646 = r13796637 / r13796645;
        double r13796647 = r13796646 * r13796642;
        double r13796648 = r13796647 + r13796642;
        return r13796648;
}

Error

Bits error versus a

Bits error versus rand

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

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(\left(\frac{rand}{\sqrt{9 \cdot \left(a - \frac{1.0}{3.0}\right)}}\right), \left(a - \frac{1.0}{3.0}\right), \left(a - \frac{1.0}{3.0}\right)\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. Final simplification0.1

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

Reproduce

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