Доброго утра.
С ума сойти какую реакцию вазвало мое вчерашнее откровение.
Всем откликнувшимся спасибо, а особое спасибо "Oleg S. Plesser" - он сам открыл
и начал дисскусссию, которая, как мне кажется зашла в небольшой тупик из-за отсутствия
профессиональных экономических знаний.
Смотреть и читать здесь: http://shelek.com/forum/viewtopic.php?t=1030.
Надеюсь среди вас есть экономисты, очень хотелось бы услышать приговор профессионала,
без регистрации - просто как Гость напишите.
Спасибо всем, кто меня поддержал в моих "заблуждениях" или наоборот "прозрениях".
Хоть я и стараюсь сам не нарушать основные законы копирайта, все ж я остаюсь
против аренды программного обеспечения и Видео и Музыкальных материалов. Протестовать
же мы можем только в тихую, отсюда видимо и такая обида возниукает, а так же
желание чего скомуниздить...
Ну и ладно об этом.
Сегодня книги не будет. Но думаю вы не пожалеете... Статья вышедшая сегодня на
сайте подкреплена кодом, и работающим примером.
Вот статья.
Самый быстрый калькулятор.Транслятор математических выражений в вашей программе.
Автор: CrashMaker
О чем эта статья?
В данной статье описывается механизм работы авторского класса C++ (далее – просто
класса) для трансляции математических выражений, составленных из математических
функций , представленных в строковом виде (например “sin(X)/X+4.78” ). Здесь
описывается динамическое создание макрофункции из машинных команд (далее дампа)
по строковому выражении функции (далее просто функции).
Описываемый здесь класс способен:
a) “создавать” дамп по заданной функции. (Например, по функции “sin(X)” будет
сгенерирован, скажем, такой дамп: D905BC005100D9FEC3)
b) “исполнять” дамп по заданной переменной. (Если передать управление дампу D905BC005100D9FEC3,
то сопроцессор и процессор выполнит следущие операции:
D905BC005100 – загрузит вещественное число, находящееся по адресу BC005100 (команда
FLD)
D9FE – вычислит синус загруженного числа (команда FSIN)
C3 – возвратит управление туда, откуда был вызван дамп (команда RET)
Записав нужную переменную по адресу BC005100 и передав управление дампу, можно
заставить сопроцессор выполнять сгенерированную функцию - код с разными с разными
вещественными аргументами. При возврате в точку, откуда вызывался дамп, использую
команду FSTP, мы можем посмотреть, что же подсчитал сопроцессор.
Сгенерированный код – дамп содержит МИНИМАЛЬНЫЙ набор машинных команд, необходимых
для вычислений. Дамп не содержит операций манипуляций с тестовой строкой – функцией.
Это все и обьясняет быстродействие “вычисления функций, представленных в строковом
виде”.
)
c) “вычислять” значение функции в режиме интерпритации для заданной переменной.
Кратко описывается сопроцессор и работа сопроцессора при вычислении некоторых
функций как моих, так и функции библиотеки MSVCRT (MS Visual C++ Run time library)
Изложение статьи, скорее, ориентированно на не очень искушенных программистов,
хотя идеи класса будут, я думаю, люботытны остальным.
К статье прилагается описанный здесь класс; Демо проект MS VC++ 6.0, реализующий
класс; Программа рекурсивного поиска файлов (проект MS VC++ 6.0 ); Програма построения
функции любого вида, с использованием обьекта листа EXCEL, написанную на MS VB
6.0.
Зачем эту нужно?
Описание класса поможет вам разобраться что происходит “внутри” программы и сопроцессора
при использовании математических функций.
Использование класса позволит снизить время вычисления функций, представленных
в строковом виде. А при многократном вычислении заданной функции по различным
аргументам позволит ЗНАЧИТЕЛЬНО снизить время вычисления. Сравниние скоростей
вычисления описанно в разделе “А Скорость?”.
Области возможного применения класса:
a) Моделирование процессов. При моделировании обычно требуется производить большие
объемы вычислений, выводить графическое отображение зависимостей и часто модифицировать
алгоритмы вычислений. Пример: написать программу построения функции любого вида,
используя описываемый здесь класс – очень просто. А скорость подсчета некоторых
функций, задаваемых пользователем программы в строковом выражении, будет даже
выше, чем при построении тех же функций по зашитому, статичному алгоритму, сгенерированному
по инструкциям высокоуровневого языка.
b) Конфигурирование и интеллектуальный учет.
Тонкое конфигурирование и настройка программ, критичных к скорости выполенния
(например ядра игры) и бизнес-приложений (где важно удобство настроек) пользователем.
c) Внутренние – “скриптовые” языки программирования, встраиваемые внутри программ.
Хороший пример – встроенный язык программирования, встроенный WINAPM – для заданий
пользователем функций построения “визуализированного звука”. Скорость вычисления
задаваемых пользователем функций можно значильно повысить .
Технические возможности : класс позволяет создавать дампы по строковым выражениям
функций, которые содержат следующие операторы и функции:
Целиком она лежит здесь: http://club.shelek.com/viewart.php?id=101
А код к ней качать отсюда: http://club.shelek.com/download.php?id=71
Желаю вам разобраться во всем написанном и удачно использовать.
С уважением, Гром.