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



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied associate-/r*0.1
Final simplification0.1
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))))