Написал небольшую прогу-калькулятор, переводит из любой системы исчисления в любую (от 2- до 36-ричной). Пока все работало в режиме Отладки ошибок не было, перевел в режим Релиз - программа ошибается на сложении двух целых чисел и ошибается на единицу. Вот участок кода, который ошибается:
C++ (Qt)
#include "qmath.h"
...
QString numeral = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
QString t = "883";
int v = 10;
int decValue = 0;
int len = t.length();
for (int j = 0; j < len; j++)
{
decValue += numeral.indexOf(t.right(1)) * pow(v, j);
t.chop(1);
}
В каждом цикле число считается верно: сначала 3, потом 80, потом 800, но все это дело складывается в 882. В чем загвоздка?
Грешу конечно на pow(), все-таки она вся на double работает, но число то все равно ничего не имеет после запятой кроме нулей, откуда же такая колоссальная погрешность, и почему она проявляется именно в Релиз версии...