Название: Перевод текста из любой системы исчислений в десятичную Отправлено: zedalert от Ноябрь 26, 2010, 10:20 Написал небольшую прогу-калькулятор, переводит из любой системы исчисления в любую (от 2- до 36-ричной). Пока все работало в режиме Отладки ошибок не было, перевел в режим Релиз - программа ошибается на сложении двух целых чисел и ошибается на единицу. Вот участок кода, который ошибается:
Код В каждом цикле число считается верно: сначала 3, потом 80, потом 800, но все это дело складывается в 882. В чем загвоздка? ??? Грешу конечно на pow(), все-таки она вся на double работает, но число то все равно ничего не имеет после запятой кроме нулей, откуда же такая колоссальная погрешность, и почему она проявляется именно в Релиз версии... Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: zedalert от Ноябрь 26, 2010, 11:36 Да, все-таки проблема в pow(), решилось через floor(pow()) видимо где-то в недрах программа считает 100 как 0.999999999 и режет все после запятой, а не ровно 1.
Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: Denjs от Ноябрь 26, 2010, 13:36 На самом деле хорошая штука для того что бы набить руку, но в Qt уже есть перевод чисел из различных систем исчисления в число и обратно.
Кажется на базе QString. Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: zedalert от Ноябрь 26, 2010, 14:11 Да, я привык что в PHP5 все приводится автоматом, а тут просто странным показалось, что именно в Debug режиме все работает как надо, а в Release - нет. Перевод есть, но только между базовыми системами, а вот скажем 5- или 7-ричных систем конечно нет. :)
Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: BRE от Ноябрь 26, 2010, 14:33 Перевод есть, но только между базовыми системами, а вот скажем 5- или 7-ричных систем конечно нет. :) QString QString::number ( long n, int base = 10 ) [static]Returns a string equivalent of the number n according to the specified base. The base is 10 by default and must be between 2 and 36. For bases other than 10, n is treated as an unsigned integer. Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: zedalert от Ноябрь 26, 2010, 16:09 Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. :)
Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: BRE от Ноябрь 26, 2010, 17:37 Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. :) Конечно интересней, я комментировал это:Перевод есть, но только между базовыми системами, а вот скажем 5- или 7-ричных систем конечно нет. :) Название: Re: Перевод текста из любой системы исчислений в десятичную Отправлено: Denjs от Ноябрь 26, 2010, 19:35 Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. :) Обратное тоже есть. Не помнюя что бы хекс-дампы руками в десятичку преобразовывал.Но насчет руками интереснее - это верно. Это базовые алгоритмы которые все должны понимать как работают. |