\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;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied fma-udef0.1
rmApplied *-un-lft-identity0.1
Applied add-sqr-sqrt0.2
Applied prod-diff0.2
Applied distribute-lft-in0.2
Simplified0.1
Simplified0.1
rmApplied clear-num0.1
Final simplification0.1
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))))