\sqrt{\left(\left(\left(\left(\frac{\left(\frac{\left(\frac{a}{b}\right)}{c}\right)}{\left(2\right)}\right) \cdot \left(\left(\frac{\left(\frac{\left(\frac{a}{b}\right)}{c}\right)}{\left(2\right)}\right) - a\right)\right) \cdot \left(\left(\frac{\left(\frac{\left(\frac{a}{b}\right)}{c}\right)}{\left(2\right)}\right) - b\right)\right) \cdot \left(\left(\frac{\left(\frac{\left(\frac{a}{b}\right)}{c}\right)}{\left(2\right)}\right) - c\right)\right)}\sqrt{\frac{\left(\frac{\left(a + b\right) + c}{2} \cdot \left(\frac{\left(a + b\right) + c}{2} - a\right)\right) \cdot \left(\frac{\left(a + b\right) + c}{2} \cdot \frac{\left(a + b\right) + c}{2} - b \cdot b\right)}{\frac{\left(a + b\right) + c}{2} + b} \cdot \frac{\frac{\left(a + b\right) + c}{2} \cdot \frac{\left(a + b\right) + c}{2} - c \cdot c}{\frac{\left(a + b\right) + c}{2} + c}}double f(double a, double b, double c) {
double r2335054 = a;
double r2335055 = b;
double r2335056 = r2335054 + r2335055;
double r2335057 = c;
double r2335058 = r2335056 + r2335057;
double r2335059 = 2.0;
double r2335060 = /* ERROR: no posit support in C */;
double r2335061 = r2335058 / r2335060;
double r2335062 = r2335061 - r2335054;
double r2335063 = r2335061 * r2335062;
double r2335064 = r2335061 - r2335055;
double r2335065 = r2335063 * r2335064;
double r2335066 = r2335061 - r2335057;
double r2335067 = r2335065 * r2335066;
double r2335068 = sqrt(r2335067);
return r2335068;
}
double f(double a, double b, double c) {
double r2335069 = a;
double r2335070 = b;
double r2335071 = r2335069 + r2335070;
double r2335072 = c;
double r2335073 = r2335071 + r2335072;
double r2335074 = 2.0;
double r2335075 = r2335073 / r2335074;
double r2335076 = r2335075 - r2335069;
double r2335077 = r2335075 * r2335076;
double r2335078 = r2335075 * r2335075;
double r2335079 = r2335070 * r2335070;
double r2335080 = r2335078 - r2335079;
double r2335081 = r2335077 * r2335080;
double r2335082 = r2335075 + r2335070;
double r2335083 = r2335081 / r2335082;
double r2335084 = r2335072 * r2335072;
double r2335085 = r2335078 - r2335084;
double r2335086 = r2335075 + r2335072;
double r2335087 = r2335085 / r2335086;
double r2335088 = r2335083 * r2335087;
double r2335089 = sqrt(r2335088);
return r2335089;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 0.1
rmApplied p16-flip--0.2
Applied associate-*r/0.2
rmApplied p16-flip--0.3
Final simplification0.3
herbie shell --seed 2019124 +o rules:numerics
(FPCore (a b c)
:name "Area of a triangle"
:pre (and (<.p16 (real->posit16 0) a) (<.p16 (real->posit16 0) b) (<.p16 (real->posit16 0) c))
(sqrt.p16 (*.p16 (*.p16 (*.p16 (/.p16 (+.p16 (+.p16 a b) c) (real->posit16 2)) (-.p16 (/.p16 (+.p16 (+.p16 a b) c) (real->posit16 2)) a)) (-.p16 (/.p16 (+.p16 (+.p16 a b) c) (real->posit16 2)) b)) (-.p16 (/.p16 (+.p16 (+.p16 a b) c) (real->posit16 2)) c))))