Реализация анализатора (парсера) формул времени выполнения |
Здравствуйте, гость ( Вход | Регистрация )
Реализация анализатора (парсера) формул времени выполнения |
AntonTatu |
4.3.2009, 17:56
Сообщение
#1
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем привет !
Вопрос в следующем, имеется прога которая генерирует некоторую формулу (формула меняет количество своих параметров в зависимости от исходных значений в программе ), в этой же проге есть массив который использует полученную формулу в дальнейших расчетах, хочется создать из формулы dll ку и потом ее вызывать в нужном месте программы, как это сделать? С вызовом полученной dll я вроде бы разобрался, а вот как научить прогу генерить dll ку понять не могу. ЗЫ: Какие можно использовать компилятор/линковщик (минимум занимаемого места, требуемых для работы файлов, потдержка STL требуется) Выручайте ! Спасибо ! |
|
|
SABROG |
9.3.2009, 16:11
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Как по скорости?
|
|
|
AntonTatu |
9.3.2009, 18:59
Сообщение
#3
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
BRE |
9.3.2009, 20:32
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Как по скорости? на первый взгляд не плохо, наднях обязательно отпишусь... Погонял тесты, при замене QStack на std::stack, получил увеличение производительности больше чем в 12 раз. Раскрывающийся текст
|
|
|
AD |
9.3.2009, 20:36
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
BRE |
9.3.2009, 20:46
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Погонял тесты, при замене QStack на std::stack, получил увеличение производительности больше чем в 12 раз. Кстати, а почему так? С чем это связано? Пока не разбирался, сам в недоумении. Будем посмотреть... Посмотрел. QStack построен на базе QVector, и при добавлении/удалении элемента постоянно делает resize вектора. std::stack построен на std::deque, соответственно скорость добавления/удаления на высоте. Сообщение отредактировал BRE - 9.3.2009, 22:20 |
|
|
AntonTatu |
10.3.2009, 12:49
Сообщение
#7
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
..получил увеличение производительности больше чем в 12 раз. А что нужно сделать что бы переделать Вот этот кусочек
на на такой
т.е. необходимо создать формулу, посчитать ее, j=0; f.addOp( new VarOp( &arr[ 0 ][ j ] ) ); f.addOp( new VarOp( &arr[ 3 ][ j ] ) ); f.addOp( new VarOp( &arr[ 7 ][ j ] ) ); res = f.calc(); передвинуться на следующий j -й столбец массива arr, посчитать, j : =j+1; res = f.calc(); на следующий.. j : =j+1; res = f.calc(); и т.д. т.е. что бы появилась возможность "сдвигать" формулу и, не перестраивая формулу заново и не генерируя новый массив ? Сообщение отредактировал AntonTatu - 10.3.2009, 17:36 |
|
|
BRE |
10.3.2009, 20:46
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
т.е. что бы появилась возможность "сдвигать" формулу и, не перестраивая формулу заново и не генерируя новый массив ? Ну барин ты задачки задаешь. (с) Переделать операцию VarOp или сделать еще одну операцию (это набросок).
Таким образом можно наделать разных необходимых операций, ввести переменные и т.д. Например, если у всех переменных необходимо изменять j, можно сделать такую операцию, которая это будет делать вызовом одной функции. Думай пробуй. |
|
|
AntonTatu |
10.3.2009, 23:38
Сообщение
#9
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ну барин ты задачки задаешь. (с) ............................................. ............................................. Таким образом можно наделать разных необходимых операций, ввести переменные и т.д. Например, если у всех переменных необходимо изменять j, можно сделать такую операцию, которая это будет делать вызовом одной функции. Думай пробуй. Да у самого голова уже пухнет , залез в такие дебри в которых мало что понимаю Последний вопрос связанный вот с этим , и все.... вот эта часть
как сделать так что бы при сложении если на стеке ( m_stack.push( v1 + v2 ) число больше ну к примеру 100 (или любого какое нравится) остановить подсчет Formula::calc() и вывести результат ? я сделал так.... вот
все работает как надо, но мне кажется что можно было както проще сделать ? Сообщение отредактировал AntonTatu - 11.3.2009, 0:21 |
|
|
Текстовая версия | Сейчас: 30.1.2025, 3:45 |