155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
|
||||||
1 | ||||||
StrToInt - можно ли быстрее и компактнее19.07.2011, 13:06. Показов 2274. Ответов 6
Метки нет (Все метки)
0
|
19.07.2011, 13:06 | |
Ответы с готовыми решениями:
6
Как можно сделать программу более компактнее Задача про кирпич - как можно написать компактнее программу, чтобы она работала? Как можно быстрее! Как можно быстрее |
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
|
|
19.07.2011, 20:16 [ТС] | 3 |
murderer,
Причём длина строки в переводе чисел уважаемый!!!!
0
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|||||||||||
20.07.2011, 08:35 | 4 | ||||||||||
IOAN, насколько я понял, ты пытаешься создать универсальный алгоритм, который объединяет StrToBin, StrToDec, StrToHex, StrToOct, IMHO:
1) нужно каждый перевод отшлифовать по отдельности, а уже потом объединять их 2) проверка на +/- нужна только для StrToDec для StrToBin, StrToHex и StrToOct знак определяется старшим битом 3)
1
|
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
|
||||||
20.07.2011, 18:09 [ТС] | 5 | |||||
Спасибо Mikl всё правильно.
1) Каждый перевод изначально был сделан отдельно, а потом делал объединение для уменьшение размера кода, но в итоге это выполняется медленнее чем каждый перевод в отдельности! 2) Знак я проверяю и устанавливаю старший бит после перевода если надо.
0
|
4164 / 1816 / 216
Регистрация: 06.10.2010
Сообщений: 4,070
|
||||||
21.07.2011, 17:24 | 6 | |||||
IOAN
Посмотри ещё раз как работает мой код. Я просматриваю строку от старших знаков к младшим и на каждой итерации умножаю число на основание CC. Получается так 1) Берём строку '4567' 2) edx = edx*10+4=4 3) edx = edx*10+5=45 4) edx = edx*10+6=456 5) edx = edx*10+7=4567 У тебя же строка просматривается в обратном порядке 1) Берём строку '4567' 2) edi = edi+7*1=7 3) edi = edi+6*10=67 4) edi = edi+5*100=567 5) edi = edi+4*1000=4567 Добавлено через 20 минут Если основание СС является степенью двойки можно сделать так
Добавлено через 10 минут Если разрешено использовать SSSE3, то подумав можно свести перевод строки в число к такой последовательности команд pmaddubsw, maddwd, pmulld, phaddd.
0
|
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
|
|
21.07.2011, 23:07 [ТС] | 7 |
1) Берём строку '1010h'
2) edx = edx*16+1=1 3) edx = edx*16+0=16 4) edx = edx*16+1=257 5) edx = edx*16+0=4112 1) Берём строку '1010d' 2) edx = edx*10+1=1 3) edx = edx*10+0=10 4) edx = edx*10+1=101 5) edx = edx*10+0=1010 1) Берём строку '1010o' 2) edx = edx*8+1=1 3) edx = edx*8+0=8 4) edx = edx*8+1=65 5) edx = edx*8+0=520 1) Берём строку '1010b' 2) edx = edx*2+1=1 3) edx = edx*2+0=2 4) edx = edx*2+1=5 5) edx = edx*2+0=10 Примерно это и делает мой код. Второй предложенный вариант хорош возьму, но не увинерсален. А FPU, SSE не использую. Пишу транслятор для записи пользовательских команд в бинарный файл. Стандартных комманд достаточно.
0
|
21.07.2011, 23:07 | |
21.07.2011, 23:07 | |
Помогаю со студенческими работами здесь
7
Можно ли сделать быстрее? Нужна \ как можно быстрее ! Можно ли заставить ЖД работать быстрее? создать программу в c++ как можно быстрее Олимпиадная задача (как можно быстрее) Ребят Требуется как можно быстрее! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |