\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)\mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot \left(a - \frac{\frac{1}{\sqrt{3}}}{\sqrt{3}}\right) + \mathsf{fma}\left(\frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}}, rand, 1\right) \cdot \left(\frac{1}{\sqrt{3}} \cdot \left(\frac{-1}{\sqrt{3}} + \frac{1}{\sqrt{3}}\right)\right)double f(double a, double rand) {
double r177167 = a;
double r177168 = 1.0;
double r177169 = 3.0;
double r177170 = r177168 / r177169;
double r177171 = r177167 - r177170;
double r177172 = 9.0;
double r177173 = r177172 * r177171;
double r177174 = sqrt(r177173);
double r177175 = r177168 / r177174;
double r177176 = rand;
double r177177 = r177175 * r177176;
double r177178 = r177168 + r177177;
double r177179 = r177171 * r177178;
return r177179;
}
double f(double a, double rand) {
double r177180 = 1.0;
double r177181 = 9.0;
double r177182 = a;
double r177183 = 3.0;
double r177184 = r177180 / r177183;
double r177185 = r177182 - r177184;
double r177186 = r177181 * r177185;
double r177187 = sqrt(r177186);
double r177188 = r177180 / r177187;
double r177189 = rand;
double r177190 = fma(r177188, r177189, r177180);
double r177191 = sqrt(r177183);
double r177192 = r177180 / r177191;
double r177193 = r177192 / r177191;
double r177194 = r177182 - r177193;
double r177195 = r177190 * r177194;
double r177196 = -1.0;
double r177197 = r177196 / r177191;
double r177198 = 1.0;
double r177199 = r177198 / r177191;
double r177200 = r177197 + r177199;
double r177201 = r177192 * r177200;
double r177202 = r177190 * r177201;
double r177203 = r177195 + r177202;
return r177203;
}



Bits error versus a



Bits error versus rand
Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.1
Applied times-frac0.1
Applied add-sqr-sqrt0.6
Applied prod-diff0.6
Applied distribute-lft-in0.6
Simplified0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020047 +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))))