\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{\frac{1}{\sqrt{a - \frac{1}{3}}}}{\sqrt{9}}, rand, 1\right) \cdot \left(a - \frac{1}{3}\right)double f(double a, double rand) {
double r135692 = a;
double r135693 = 1.0;
double r135694 = 3.0;
double r135695 = r135693 / r135694;
double r135696 = r135692 - r135695;
double r135697 = 9.0;
double r135698 = r135697 * r135696;
double r135699 = sqrt(r135698);
double r135700 = r135693 / r135699;
double r135701 = rand;
double r135702 = r135700 * r135701;
double r135703 = r135693 + r135702;
double r135704 = r135696 * r135703;
return r135704;
}
double f(double a, double rand) {
double r135705 = 1.0;
double r135706 = a;
double r135707 = 3.0;
double r135708 = r135705 / r135707;
double r135709 = r135706 - r135708;
double r135710 = sqrt(r135709);
double r135711 = r135705 / r135710;
double r135712 = 9.0;
double r135713 = sqrt(r135712);
double r135714 = r135711 / r135713;
double r135715 = rand;
double r135716 = fma(r135714, r135715, r135705);
double r135717 = r135716 * r135709;
return r135717;
}



Bits error versus a



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