\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{1}{\sqrt{9}}}{\sqrt{a - \frac{1}{3}}}, rand, 1\right) \cdot \left(a - \frac{1}{3}\right)double f(double a, double rand) {
double r72592 = a;
double r72593 = 1.0;
double r72594 = 3.0;
double r72595 = r72593 / r72594;
double r72596 = r72592 - r72595;
double r72597 = 9.0;
double r72598 = r72597 * r72596;
double r72599 = sqrt(r72598);
double r72600 = r72593 / r72599;
double r72601 = rand;
double r72602 = r72600 * r72601;
double r72603 = r72593 + r72602;
double r72604 = r72596 * r72603;
return r72604;
}
double f(double a, double rand) {
double r72605 = 1.0;
double r72606 = 9.0;
double r72607 = sqrt(r72606);
double r72608 = r72605 / r72607;
double r72609 = a;
double r72610 = 3.0;
double r72611 = r72605 / r72610;
double r72612 = r72609 - r72611;
double r72613 = sqrt(r72612);
double r72614 = r72608 / r72613;
double r72615 = rand;
double r72616 = fma(r72614, r72615, r72605);
double r72617 = r72616 * r72612;
return r72617;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied associate-/r*0.2
Final simplification0.2
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a rand)
:name "Octave 3.8, oct_fill_randg"
:precision binary64
(* (- a (/ 1 3)) (+ 1 (* (/ 1 (sqrt (* 9 (- a (/ 1 3))))) rand))))