When multiplying a float with 0.8 again and again the value does not result in zero, but overflows into something big. E.g.
float mult(float x) { return x * 0.8); }
ASSERT ( mult (1e-38) < 1.0); // fails
This happens for mcs51, but I haven't tested others yet.
Fixed in SDCC 3.1.2 [r7237].
Last edit: Maarten Brock 2021-03-20