Вопрос в том почему
static_cast<int>(abs(13200 / 1.1)) = 11999
а
static_cast<int>(abs(12000.)) = 12000
Потому что на самом деле это число - 11999.99999999999818...
Добро пожаловать в мир вычислений с плавающей точкой! :)
Здесь нет точного представления, здесь любое число - просто сумма степеней 2 - типа, 2 + 1/2 + 1/16 +...
Беда в том, что знаменатель 1.1 не может быть представлен в формате IEEE-754 точно, он будет округлён к ближайшему значению, равному 1.100000000000000088817841970012523233890533447265625 (0x3ff199999999999a), которое чуть-чуть больше. По этой причине после деления получится число чуть чуть меньше 12'000, и вы берёте от него целую часть, получаете 11'999
И хотя я согласен, что это очень тупо, когда константы на этапе компиляции вычисляются не точно, всё-таки придётся пока что с этим жить. Таково наследие сурового прошлого в программировании.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей