\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)\mathsf{fma}\left(\left(\frac{1}{3} \cdot \frac{rand}{\sqrt{a - \frac{1.0}{3.0}}}\right), \left(a - \frac{1.0}{3.0}\right), \left(a - \frac{1.0}{3.0}\right)\right)double f(double a, double rand) {
double r12233826 = a;
double r12233827 = 1.0;
double r12233828 = 3.0;
double r12233829 = r12233827 / r12233828;
double r12233830 = r12233826 - r12233829;
double r12233831 = 1.0;
double r12233832 = 9.0;
double r12233833 = r12233832 * r12233830;
double r12233834 = sqrt(r12233833);
double r12233835 = r12233831 / r12233834;
double r12233836 = rand;
double r12233837 = r12233835 * r12233836;
double r12233838 = r12233831 + r12233837;
double r12233839 = r12233830 * r12233838;
return r12233839;
}
double f(double a, double rand) {
double r12233840 = 0.3333333333333333;
double r12233841 = rand;
double r12233842 = a;
double r12233843 = 1.0;
double r12233844 = 3.0;
double r12233845 = r12233843 / r12233844;
double r12233846 = r12233842 - r12233845;
double r12233847 = sqrt(r12233846);
double r12233848 = r12233841 / r12233847;
double r12233849 = r12233840 * r12233848;
double r12233850 = fma(r12233849, r12233846, r12233846);
return r12233850;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019121 +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))))