\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(\frac{a - \frac{1.0}{3.0}}{3 \cdot \left(\sqrt{a} - \sqrt{\frac{1.0}{3.0}}\right)} \cdot rand\right) \cdot \frac{\sqrt{a} - \sqrt{\frac{1.0}{3.0}}}{\sqrt{a - \frac{1.0}{3.0}}} + \left(a - \frac{1.0}{3.0}\right)double f(double a, double rand) {
double r10038291 = a;
double r10038292 = 1.0;
double r10038293 = 3.0;
double r10038294 = r10038292 / r10038293;
double r10038295 = r10038291 - r10038294;
double r10038296 = 1.0;
double r10038297 = 9.0;
double r10038298 = r10038297 * r10038295;
double r10038299 = sqrt(r10038298);
double r10038300 = r10038296 / r10038299;
double r10038301 = rand;
double r10038302 = r10038300 * r10038301;
double r10038303 = r10038296 + r10038302;
double r10038304 = r10038295 * r10038303;
return r10038304;
}
double f(double a, double rand) {
double r10038305 = a;
double r10038306 = 1.0;
double r10038307 = 3.0;
double r10038308 = r10038306 / r10038307;
double r10038309 = r10038305 - r10038308;
double r10038310 = 3.0;
double r10038311 = sqrt(r10038305);
double r10038312 = sqrt(r10038308);
double r10038313 = r10038311 - r10038312;
double r10038314 = r10038310 * r10038313;
double r10038315 = r10038309 / r10038314;
double r10038316 = rand;
double r10038317 = r10038315 * r10038316;
double r10038318 = sqrt(r10038309);
double r10038319 = r10038313 / r10038318;
double r10038320 = r10038317 * r10038319;
double r10038321 = r10038320 + r10038309;
return r10038321;
}



Bits error versus a



Bits error versus rand
Results
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.2
Applied difference-of-squares0.2
Applied times-frac0.1
Applied associate-*r*0.1
rmApplied flip-+0.1
Applied associate-/l/0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2019121
(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))))