\sqrt{\left(\left(x_element - \left(x + dirX \cdot d\right)\right) \cdot \left(x_element - \left(x + dirX \cdot d\right)\right) + \left(y_element - \left(y + dirZ \cdot d\right)\right) \cdot \left(y_element - \left(y + dirZ \cdot d\right)\right)\right) + \left(dirY \cdot d\right) \cdot \left(dirY \cdot d\right)} + d\sqrt{\left(\left(x_element - \left(x + dirX \cdot d\right)\right) \cdot \left(x_element - \left(x + dirX \cdot d\right)\right) + \left(y_element - \left(y + dirZ \cdot d\right)\right) \cdot \left(y_element - \left(y + dirZ \cdot d\right)\right)\right) + \left(dirY \cdot d\right) \cdot \left(dirY \cdot d\right)} + ddouble code(double x_element, double x, double dirX, double d, double y_element, double y, double dirZ, double dirY) {
return ((double) (((double) sqrt(((double) (((double) (((double) (((double) (x_element - ((double) (x + ((double) (dirX * d)))))) * ((double) (x_element - ((double) (x + ((double) (dirX * d)))))))) + ((double) (((double) (y_element - ((double) (y + ((double) (dirZ * d)))))) * ((double) (y_element - ((double) (y + ((double) (dirZ * d)))))))))) + ((double) (((double) (dirY * d)) * ((double) (dirY * d)))))))) + d));
}
double code(double x_element, double x, double dirX, double d, double y_element, double y, double dirZ, double dirY) {
return ((double) (((double) sqrt(((double) (((double) (((double) (((double) (x_element - ((double) (x + ((double) (dirX * d)))))) * ((double) (x_element - ((double) (x + ((double) (dirX * d)))))))) + ((double) (((double) (y_element - ((double) (y + ((double) (dirZ * d)))))) * ((double) (y_element - ((double) (y + ((double) (dirZ * d)))))))))) + ((double) (((double) (dirY * d)) * ((double) (dirY * d)))))))) + d));
}



Bits error versus x_element



Bits error versus x



Bits error versus dirX



Bits error versus d



Bits error versus y_element



Bits error versus y



Bits error versus dirZ



Bits error versus dirY
Results
Initial program 50.6
Final simplification50.6
herbie shell --seed 2020153
(FPCore (x_element x dirX d y_element y dirZ dirY)
:name "(+ (sqrt (+ (+ (* (- x_element (+ x (* dirX d))) (- x_element (+ x (* dirX d)))) (* (- y_element (+ y (* dirZ d))) (- y_element (+ y (* dirZ d))))) (* (* dirY d) (* dirY d)))) d)"
:precision binary64
(+ (sqrt (+ (+ (* (- x_element (+ x (* dirX d))) (- x_element (+ x (* dirX d)))) (* (- y_element (+ y (* dirZ d))) (- y_element (+ y (* dirZ d))))) (* (* dirY d) (* dirY d)))) d))