\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)\mathsf{fma}\left(\left(\frac{1}{3} \cdot \frac{1}{\frac{\sqrt{a - \frac{1.0}{3.0}}}{rand}}\right), \left(a - \frac{1.0}{3.0}\right), \left(a - \frac{1.0}{3.0}\right)\right)double f(double a, double rand) {
double r1801259 = a;
double r1801260 = 1.0;
double r1801261 = 3.0;
double r1801262 = r1801260 / r1801261;
double r1801263 = r1801259 - r1801262;
double r1801264 = 1.0;
double r1801265 = 9.0;
double r1801266 = r1801265 * r1801263;
double r1801267 = sqrt(r1801266);
double r1801268 = r1801264 / r1801267;
double r1801269 = rand;
double r1801270 = r1801268 * r1801269;
double r1801271 = r1801264 + r1801270;
double r1801272 = r1801263 * r1801271;
return r1801272;
}
double f(double a, double rand) {
double r1801273 = 0.3333333333333333;
double r1801274 = 1.0;
double r1801275 = a;
double r1801276 = 1.0;
double r1801277 = 3.0;
double r1801278 = r1801276 / r1801277;
double r1801279 = r1801275 - r1801278;
double r1801280 = sqrt(r1801279);
double r1801281 = rand;
double r1801282 = r1801280 / r1801281;
double r1801283 = r1801274 / r1801282;
double r1801284 = r1801273 * r1801283;
double r1801285 = fma(r1801284, r1801279, r1801279);
return r1801285;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
rmApplied clear-num0.2
Final simplification0.2
herbie shell --seed 2019133 +o rules:numerics
(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))))