32-битные поплавки имеют только 24 бит точности. Таким образом, float не может выполнить b точно - он делает лучшую работу, которую он может, установив некоторый показатель степени, а затем мантисса, чтобы получить как можно ближе.
Когда вы затем рассмотрите представление с плавающей запятой b и a, и попытайтесь добавить их, операция сложения сдвинет мантиссой небольшого числа a вниз, когда она попытается сопоставить экспоненту b, до точки, где значение (3) падает с конца, и вы остаетесь на 0. Следовательно, дополнение оператор заканчивает добавление с плавающей точкой нуля к b.