Вопрос в том почему
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
И хотя я согласен, что это очень тупо, когда константы на этапе компиляции вычисляются не точно, всё-таки придётся пока что с этим жить. Таково наследие сурового прошлого в программировании.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть переменная типа uint8*, которая "заполнена" картинкойКак преобразовать её в QIcon? А вот функция, которая заполняет переменную типа...
Нужна помощь или совет как реализовать такую задачу:Надо отсортировать массив и вывести все этапы сортировкиМассивы я отсортировал и программа...
Скажите, пожалуйста, в каком состоянии находятся объекты стандартной библиотеки после перемещения? Можно ли продолжать их использовать?
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском