\left(a - \frac{1.0}{3.0}\right) \cdot \left(1.0 + \frac{1.0}{\sqrt{9.0 \cdot \left(a - \frac{1.0}{3.0}\right)}} \cdot rand\right)1.0 \cdot \mathsf{fma}\left(rand \cdot \frac{{\left(a - \frac{1.0}{3.0}\right)}^{\frac{-1}{2}}}{\sqrt{9.0}}, a - \frac{1.0}{3.0}, a - \frac{1.0}{3.0}\right)double f(double a, double rand) {
double r2738033 = a;
double r2738034 = 1.0;
double r2738035 = 3.0;
double r2738036 = r2738034 / r2738035;
double r2738037 = r2738033 - r2738036;
double r2738038 = 9.0;
double r2738039 = r2738038 * r2738037;
double r2738040 = sqrt(r2738039);
double r2738041 = r2738034 / r2738040;
double r2738042 = rand;
double r2738043 = r2738041 * r2738042;
double r2738044 = r2738034 + r2738043;
double r2738045 = r2738037 * r2738044;
return r2738045;
}
double f(double a, double rand) {
double r2738046 = 1.0;
double r2738047 = rand;
double r2738048 = a;
double r2738049 = 3.0;
double r2738050 = r2738046 / r2738049;
double r2738051 = r2738048 - r2738050;
double r2738052 = -0.5;
double r2738053 = pow(r2738051, r2738052);
double r2738054 = 9.0;
double r2738055 = sqrt(r2738054);
double r2738056 = r2738053 / r2738055;
double r2738057 = r2738047 * r2738056;
double r2738058 = fma(r2738057, r2738051, r2738051);
double r2738059 = r2738046 * r2738058;
return r2738059;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied associate-/r*0.1
rmApplied *-un-lft-identity0.1
Applied sqrt-prod0.1
Applied div-inv0.1
Applied times-frac0.1
Simplified0.1
rmApplied pow1/20.1
Applied pow-flip0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019165 +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))))