double f(double a, double rand) {
double r5647076 = a;
double r5647077 = 1.0;
double r5647078 = 3.0;
double r5647079 = r5647077 / r5647078;
double r5647080 = r5647076 - r5647079;
double r5647081 = 1.0;
double r5647082 = 9.0;
double r5647083 = r5647082 * r5647080;
double r5647084 = sqrt(r5647083);
double r5647085 = r5647081 / r5647084;
double r5647086 = rand;
double r5647087 = r5647085 * r5647086;
double r5647088 = r5647081 + r5647087;
double r5647089 = r5647080 * r5647088;
return r5647089;
}
double f(double a, double rand) {
double r5647090 = 0.3333333333333333;
double r5647091 = rand;
double r5647092 = a;
double r5647093 = 1.0;
double r5647094 = 3.0;
double r5647095 = r5647093 / r5647094;
double r5647096 = r5647092 - r5647095;
double r5647097 = sqrt(r5647096);
double r5647098 = r5647091 / r5647097;
double r5647099 = r5647090 * r5647098;
double r5647100 = fma(r5647099, r5647096, r5647096);
return r5647100;
}
\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{1}{3} \cdot \frac{rand}{\sqrt{a - \frac{1.0}{3.0}}}\right) \cdot \left(a - \frac{1.0}{3.0}\right) + \left(a - \frac{1.0}{3.0}\right))_*


Bits error versus a



Bits error versus rand
Initial program 0.2
Simplified0.1
rmApplied sqrt-prod0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019101 +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))))