Когда я компилирую свое приложение в режиме Release, я получаю неверный результат деления 40.0 / 5 = 7. При отладочной компиляции это правильно, и результат равен 8
Я пытался привести к удвоению, к двойному,к int, без abs () и т. д., но не повезло.Я знаю, что это должно быть связано со странностью математики с плавающей точкой на компьютерах, но я понятия не имею, что именно.Я также зарегистрировал значения на консоли через qDebugs () под кодом - все выглядит хорошо, кроме начальных шагов.
//somewhere in code
double tonnageToRecover = 0.5;//actually, its QDoubleSpinBox->value(), with 0.5 step set. Anyway, the value finally reduces to 0.5 every time
double tonnagePerArmorPoint = 0.0125;//taken from .json
int minimumArmorDelta = 5;//taken from .json
...
//palace where the calculations are preformed
double armorPointsPerHalfTon = tonnageToRecover / tonnagePerArmorPoint;
int steps = abs(static_cast<int>(armorPointsPerHalfTon / minimumArmorDelta));
qDebug() << "armorPointsPerHalfTon = " << armorPointsPerHalfTon;
qDebug() << "tonnagePerArmorPoint = " << tonnagePerArmorPoint;
qDebug() << "steps initial = " << steps;
qDebug() << "minimumArmorDelta = " << minimumArmorDelta;
обе части 1-го деления имеют тип double, tonnageToRecover = 0.5, tonnagePerArmorPoint = 0.0125,результат 40, что нормально. Минимум ArmorDelta равен int = 5
Так почему 40/5 - это не 8 ??
Компилятор - MinGW 32 5.3.0, из пакета Qt 5.11
Скриншоты: Релиз Отладка