Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  14:24[Войти] | [Зарегистрироваться]

Парсер математических выражений 2

Юрий Писарев
дата публикации 04-05-2014 09:32

Представляю вашему вниманию обновленный пакет компонентов для расчета математических формул.

Новые версии компонентов предназначены для Delphi 5, Delphi 6, Delphi 7, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5.

В архиве содержатся компоненты для указанных версий Delphi, а еще — примеры, которые не требуют установки компонентов. Просто открывайте файл проекта и запускайте его.

Представленный материал является дополнением к существующей статье Парсер математических выражений. Быстрое вычисление выражений и массива выражений.

В дополнение к ранее представленному материалу хочу рассказать подробнее про особенности вычисления массива различных выражений. В новой версии компонентов алгоритм работы кэша подвергся доработке. Была также исправлена ошибка в работе кэша, которая имела место быть при расчете сложных формул, состоящих из частей, не разделенных пробелами.

С целью увеличения скорости и минимизации затрат на преобразование текстовой формулы в байт-код, был придуман кэш, в котором хранятся текстовые формулы и соответствующий им байт-код. В него попадают те формулы, которые были вычислены ранее.

Если требуется вычислить значение формулы, которая есть в кэше, то, соответственно, берется уже существующий байт-код и не тратится время впустую на повторное преобразование формулы.

Кэш в действительности работает несколько сложнее — попадает не только сама формула, но и множество ее мелких фрагментов. Это дает определенный прирост производительности, так как новая формула может и не совпадать с той, которая есть в кэше, а вот их части с большей долей вероятности — могут.

В действительности кэш работает еще чуть сложнее. Есть второй уровень кэша, в который попадает структура формулы. Под структурой я подразумеваю некий шаблон выражения, в котором убраны все числа, вне зависимости от их типа. Например, для выражения 2 * 2 шаблон будет такой: ? * ?.

Как и в случае с кэшем первого уровня, в кэш второго уровня попадает не только сама формула, но и множество ее мелких фрагментов. Это также дает определенный прирост производительности при расчете сложных выражений.

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

Все процессы, описанные выше, можно отключить: Parser.Cached := False; В этом случае парсер будет переводить формулу в байт-код каждый раз, когда требуется вычислить ее значение.



К материалу прилагаются файлы:


Смотрите также материалы по темам:


 Обсуждение материала [ 13-10-2020 01:56 ] 13 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования