Hola guiller130292.
No revisé el código en profundidad pero a simple vista, al ser
x1 y
b variables de tipo
Extended (punto flotante), el problema se produce en la línea:
El hardware representa los números de punto flotante como fracciónes en base binaria y dado que la grán mayoría de estos no pueden ser representados exáctamente así, solo se trabaja con aproximaciones. Resumiendo:
No compares por márgenes absolutos.
Si gustas ampliar:
The Floating-Point Guide.
Saludos