\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)\left(\frac{1}{\sqrt{9}} \cdot \frac{1 \cdot rand}{\sqrt{a - \frac{1}{3}}} + 1\right) \cdot \left(a - \frac{1}{3}\right)double f(double a, double rand) {
double r63941 = a;
double r63942 = 1.0;
double r63943 = 3.0;
double r63944 = r63942 / r63943;
double r63945 = r63941 - r63944;
double r63946 = 9.0;
double r63947 = r63946 * r63945;
double r63948 = sqrt(r63947);
double r63949 = r63942 / r63948;
double r63950 = rand;
double r63951 = r63949 * r63950;
double r63952 = r63942 + r63951;
double r63953 = r63945 * r63952;
return r63953;
}
double f(double a, double rand) {
double r63954 = 1.0;
double r63955 = 9.0;
double r63956 = sqrt(r63955);
double r63957 = r63954 / r63956;
double r63958 = 1.0;
double r63959 = rand;
double r63960 = r63958 * r63959;
double r63961 = a;
double r63962 = 3.0;
double r63963 = r63958 / r63962;
double r63964 = r63961 - r63963;
double r63965 = sqrt(r63964);
double r63966 = r63960 / r63965;
double r63967 = r63957 * r63966;
double r63968 = r63967 + r63958;
double r63969 = r63968 * r63964;
return r63969;
}



Bits error versus a



Bits error versus rand
Results
Initial program 0.1
Simplified0.1
rmApplied fma-udef0.1
Simplified0.1
rmApplied sqrt-prod0.1
Applied associate-/r*0.1
Simplified0.1
rmApplied div-inv0.1
Final simplification0.1
herbie shell --seed 2019179 +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))))