\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{9 \cdot \left(a - \frac{1}{3}\right)}} \cdot rand\right)\left(a - \frac{1}{3}\right) \cdot \left(1 + \frac{1}{\sqrt{\mathsf{fma}\left(a, 9, 9 \cdot \frac{-\frac{1}{\sqrt[3]{3}}}{\sqrt[3]{3} \cdot \sqrt[3]{3}}\right) + 9 \cdot \left(\frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}} \cdot \left(\left(-\frac{1}{\sqrt[3]{3}}\right) + \frac{1}{\sqrt[3]{3}}\right)\right)}} \cdot rand\right)double f(double a, double rand) {
double r138805 = a;
double r138806 = 1.0;
double r138807 = 3.0;
double r138808 = r138806 / r138807;
double r138809 = r138805 - r138808;
double r138810 = 9.0;
double r138811 = r138810 * r138809;
double r138812 = sqrt(r138811);
double r138813 = r138806 / r138812;
double r138814 = rand;
double r138815 = r138813 * r138814;
double r138816 = r138806 + r138815;
double r138817 = r138809 * r138816;
return r138817;
}
double f(double a, double rand) {
double r138818 = a;
double r138819 = 1.0;
double r138820 = 3.0;
double r138821 = r138819 / r138820;
double r138822 = r138818 - r138821;
double r138823 = 9.0;
double r138824 = cbrt(r138820);
double r138825 = r138819 / r138824;
double r138826 = -r138825;
double r138827 = r138824 * r138824;
double r138828 = r138826 / r138827;
double r138829 = r138823 * r138828;
double r138830 = fma(r138818, r138823, r138829);
double r138831 = 1.0;
double r138832 = r138831 / r138827;
double r138833 = r138826 + r138825;
double r138834 = r138832 * r138833;
double r138835 = r138823 * r138834;
double r138836 = r138830 + r138835;
double r138837 = sqrt(r138836);
double r138838 = r138819 / r138837;
double r138839 = rand;
double r138840 = r138838 * r138839;
double r138841 = r138819 + r138840;
double r138842 = r138822 * r138841;
return r138842;
}



Bits error versus a



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