\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)\left(1 + \frac{\frac{rand \cdot 1}{\sqrt{9}}}{\sqrt{a - \frac{1}{3}}}\right) \cdot \left(a - \frac{1}{3}\right)double f(double a, double rand) {
double r94516 = a;
double r94517 = 1.0;
double r94518 = 3.0;
double r94519 = r94517 / r94518;
double r94520 = r94516 - r94519;
double r94521 = 9.0;
double r94522 = r94521 * r94520;
double r94523 = sqrt(r94522);
double r94524 = r94517 / r94523;
double r94525 = rand;
double r94526 = r94524 * r94525;
double r94527 = r94517 + r94526;
double r94528 = r94520 * r94527;
return r94528;
}
double f(double a, double rand) {
double r94529 = 1.0;
double r94530 = rand;
double r94531 = r94530 * r94529;
double r94532 = 9.0;
double r94533 = sqrt(r94532);
double r94534 = r94531 / r94533;
double r94535 = a;
double r94536 = 3.0;
double r94537 = r94529 / r94536;
double r94538 = r94535 - r94537;
double r94539 = sqrt(r94538);
double r94540 = r94534 / r94539;
double r94541 = r94529 + r94540;
double r94542 = r94541 * r94538;
return r94542;
}



Bits error versus a



Bits error versus rand
Results
Initial program 0.1
rmApplied sqrt-prod0.2
Applied add-sqr-sqrt0.2
Applied times-frac0.2
rmApplied frac-times0.2
Applied associate-*l/0.1
Simplified0.1
rmApplied pow10.1
rmApplied associate-/r*0.1
Final simplification0.1
herbie shell --seed 2019354 +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))))