\left(a - \left(\frac{\left(1.0\right)}{\left(3.0\right)}\right)\right) \cdot \left(\frac{\left(1\right)}{\left(\left(\frac{\left(1\right)}{\left(\sqrt{\left(\left(9\right) \cdot \left(a - \left(\frac{\left(1.0\right)}{\left(3.0\right)}\right)\right)\right)}\right)}\right) \cdot rand\right)}\right)\left(a - \frac{1.0}{3.0}\right) \cdot \left(1 + \frac{1}{\sqrt{\frac{9 \cdot \left(a \cdot a - \frac{1.0}{3.0} \cdot \frac{1.0}{3.0}\right)}{a + \frac{1.0}{3.0}}}} \cdot rand\right)double f(double a, double rand) {
double r3101078 = a;
double r3101079 = 1.0;
double r3101080 = /* ERROR: no posit support in C */;
double r3101081 = 3.0;
double r3101082 = /* ERROR: no posit support in C */;
double r3101083 = r3101080 / r3101082;
double r3101084 = r3101078 - r3101083;
double r3101085 = 1.0;
double r3101086 = /* ERROR: no posit support in C */;
double r3101087 = 9.0;
double r3101088 = /* ERROR: no posit support in C */;
double r3101089 = r3101088 * r3101084;
double r3101090 = sqrt(r3101089);
double r3101091 = r3101086 / r3101090;
double r3101092 = rand;
double r3101093 = r3101091 * r3101092;
double r3101094 = r3101086 + r3101093;
double r3101095 = r3101084 * r3101094;
return r3101095;
}
double f(double a, double rand) {
double r3101096 = a;
double r3101097 = 1.0;
double r3101098 = 3.0;
double r3101099 = r3101097 / r3101098;
double r3101100 = r3101096 - r3101099;
double r3101101 = 1.0;
double r3101102 = 9.0;
double r3101103 = r3101096 * r3101096;
double r3101104 = r3101099 * r3101099;
double r3101105 = r3101103 - r3101104;
double r3101106 = r3101102 * r3101105;
double r3101107 = r3101096 + r3101099;
double r3101108 = r3101106 / r3101107;
double r3101109 = sqrt(r3101108);
double r3101110 = r3101101 / r3101109;
double r3101111 = rand;
double r3101112 = r3101110 * r3101111;
double r3101113 = r3101101 + r3101112;
double r3101114 = r3101100 * r3101113;
return r3101114;
}



Bits error versus a



Bits error versus rand
Initial program 0.2
rmApplied p16-flip--0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2019107 +o rules:numerics
(FPCore (a rand)
:name "Octave 3.8, oct_fill_randg"
(*.p16 (-.p16 a (/.p16 (real->posit16 1.0) (real->posit16 3.0))) (+.p16 (real->posit16 1) (*.p16 (/.p16 (real->posit16 1) (sqrt.p16 (*.p16 (real->posit16 9) (-.p16 a (/.p16 (real->posit16 1.0) (real->posit16 3.0)))))) rand))))