You are running into problems inherent to floating point representation. Try this C program:
#include <stdio.h>
main()
{
if (0.4 <= 4 - 3.6) printf("OK\n");
else printf("NO!\n");
printf("%.25f\n", 0.4 - (4-3.6));
}
to see what happens. Keep in mind that SWI-Prolog uses double precision arithmetic implemented in C for floating point numbers.
One way to work around this is to use the rational numbers provided by SWI-Prolog:
?- X is rationalize(3.6).
X = 18 rdiv 5.
?- X is rationalize(0.4).
X = 2 rdiv 5.
?- rationalize(0.4) =< 4-rationalize(3.6).
true.