Russian Qt Forum
Октябрь 05, 2024, 02:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перевод текста из любой системы исчислений в десятичную  (Прочитано 7804 раз)
zedalert
Гость
« : Ноябрь 26, 2010, 10:20 »

Написал небольшую прогу-калькулятор, переводит из любой системы исчисления в любую (от 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 работает, но число то все равно ничего не имеет после запятой кроме нулей, откуда же такая колоссальная погрешность, и почему она проявляется именно в Релиз версии...
« Последнее редактирование: Ноябрь 26, 2010, 11:15 от zedalert » Записан
zedalert
Гость
« Ответ #1 : Ноябрь 26, 2010, 11:36 »

Да, все-таки проблема в pow(), решилось через floor(pow()) видимо где-то в недрах программа считает 100 как 0.999999999 и режет все после запятой, а не ровно 1.
Записан
Denjs
Гость
« Ответ #2 : Ноябрь 26, 2010, 13:36 »

На самом деле хорошая штука для того что бы набить руку, но в Qt уже есть перевод чисел из различных систем исчисления в число и обратно.
Кажется на базе QString.
Записан
zedalert
Гость
« Ответ #3 : Ноябрь 26, 2010, 14:11 »

Да, я привык что в PHP5 все приводится автоматом, а тут просто странным показалось, что именно в Debug режиме все работает как надо, а в Release - нет. Перевод есть, но только между базовыми системами, а вот скажем 5- или 7-ричных систем конечно нет. Улыбающийся
Записан
BRE
Гость
« Ответ #4 : Ноябрь 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.
Записан
zedalert
Гость
« Ответ #5 : Ноябрь 26, 2010, 16:09 »

Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. Улыбающийся
Записан
BRE
Гость
« Ответ #6 : Ноябрь 26, 2010, 17:37 »

Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. Улыбающийся
Конечно интересней, я комментировал это:
Перевод есть, но только между базовыми системами, а вот скажем 5- или 7-ричных систем конечно нет. Улыбающийся
Записан
Denjs
Гость
« Ответ #7 : Ноябрь 26, 2010, 19:35 »

Так это обратная моей функция. Тут тогда уж нужна toInt(), но своими руками все же интереснее. Улыбающийся
Обратное тоже есть. Не помнюя что бы хекс-дампы руками в десятичку преобразовывал.

Но насчет руками интереснее - это верно. Это базовые алгоритмы которые все должны понимать как работают.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 21.