У меня проблема с арифметической операцией с целочисленными переменными без знака.
Все переменные определены как uint32_t. Это арифметическая операция:
batt += (uint32_t) ((((charg - discharg) * (time_now - time_old)) / 1000) + 0.5);
Значения до операции:
batt = 8999824
charg = 21
discharg = 1500
time_now = 181
time_old = 132
Проблема в том, что результат после операции
batt = 13294718
вместо
batt = 8999752
В чем причина?
Заранее спасибо.
charg - discharg
вызвать переполнение беззнакового целого числа. - person MYMNeo   schedule 22.04.2013charg - discharg
отрицательно относится к вашим данным. - person Roger Rowland   schedule 22.04.2013charg - discharg
ниже нуля и поэтому переполняется. Это намеренно? - person CodesInChaos   schedule 22.04.2013abs()
. Поскольку вы читаете из файла вdischarg
, вы можете также прочитатьabs()
(при условии, что в файле могут быть значения -ve) - person Koushik Shetty   schedule 22.04.2013+ 0.5
по-прежнему ничего не делает, поскольку/ 1000
уже отбросил любую дробную часть. - person aschepler   schedule 03.07.2013