int занимает 4 байт
Не всегда. Зависит от платформы. Вы всегда можете проверить написав sizeof(int), sizeof(double) и т.п.
Но в случае с double можно задать абсолютно любое число,да еще и указать множество цифр после запятой.Как это работает?
Числа с плавающей точкой (запятой) имеют ограничение по точности. Т.е. В общем случае A + B ≈ С;