Calc - калькулятор для Windows (XP+, Server 2003+), а так же для Linux (Wine)
Текущая версия 1.8.1.151 (22.2.2017)



Калькулятор разбирает входную строку и на лету производит вычисление выражения



Calc В основе работы программы лежит алгоритм Обратной польской записи.


Программа поддерживает:
Константы:
"pi" пи, архимедова константа
"c" скорость света в вакууме (м·с-1)
"G" гравитационная постоянная Ньютона (м3·кг-1·с-2), данная константа применима только для вычислений на Земле ;)
"J" Constants of Gauss fild
"phi" золотое сечение
"h" постоянная Планка (элементарный квант действия) (Дж·с)
"atm" стандартное атмосферное давление (Па), данная константа применима только для вычислений на Земле ;)
"L" число Авогадро (моль-1)
"R" газовая постоянная (Дж·К-1·моль-1)
Функции:
"sin" синус
"cos" косинус
"tan" тангенс
"arccos" аркоксинус
"arcsin" арксинус
"arctan" арктангенс
"rad" преобразование градусов в радианы. Пример использования: sin(30°): sin( rad(30) ).
"exp" функция экспоненты, при x=1 возвращает значение равное числу e
"log" натуральный логаритм
"log10" логаритм с основанием 10
"pow" степень, данная функция так же может извлекать корни, например pow(2,1/5) эквивалентно корню 5 степени из 2
"sqrt" квадратный корень
Операции + - * / и операция степени ^ (эквивалентна функции pow)
Выражения со скобками
Числа содержащие показатель степени, например 1.4e-3 (эквивалент 1.4*10^-3)
Точность результата 15 знаков после запятой, пока не регулируется


Внимание! Программа работает только на процессорах поддерживающих SSE2, так же для работы программы необходимо установить Microsoft Visual C++ 2015 Update 3 Redistributable Package




Calc Исходники можно посмотреть тут
Для анонимного доступа введите 'demo' и 'demo' в поля для логина и пароля


Текущая версия 1.8.1.151 (22.2.2017)
Для 32х битных платформ  [176K]: скачать  зеркало 

Для 64х битных платформ  [190K]: скачать  зеркало 




История версий:



1.8.1.151 (22.2.2017):
* Добавлена функция rad для преобразования градусов в радианы. Пример использования: sin(30°): sin( rad(30) ) = 0.5.
* Поправлены на математические названия arccos, arcsin, arctan (ранее acos, asin, atan).
* Убрана сложная, долгая и малополезная проверка на "недопустимый символ", оставлена только проверка на "недопустимый символ после замены констант и обработки функций, проверьте правильность их написания".

1.8.0.146 (22.2.2017):
* Вычищен и избавлен от всех недостатков код линейного парсера. Он стал проще, быстрее и универсальнее.
* После полной доработки линейного парсера убраны все избыточные проверки валидатора.
* Исправлена ошибка вывода в лог неверной позиции с обнаруженной ошибкой.
* Теперь программа ругается если в процессе полного разбора произошла неописанная ошибка во внутренней логике.
* Несколько мелких оптимизаций за счёт перестановок проверок в составных условиях в наиболее горячих местах.

1.7.0.145 (29.9.2016):
* Убрал из лога малополезные ошибки при обработке линейного выражения.
* Избавился от остатков самой первой реализации.
* Убрал вывод предупреждений.
* Исправлена ошибка в проверке параметров функций: иногда обработка некорректных значений, например, при неверных символах в строке могла продолжаться дальше, а прерываться уже после в основном обработчике. Такое поведение хоть и не приводило к выводу неверных результатов, но затрудняло диагностику некорректно написанных больших выражений.
* Исправлена ошибка с некорректным указанием координаты ошибки в сложных выражениях с множеством вложенных.
* Оптимизация обработки параметров и поиска функций.
* Оптимизация в предварительных проверках входной строки.
* Почищен код.

1.6.0.141 (22.9.2016):
* Сборка в Visual Studio 2015 update 3.
* Поправлено несколько мест с потенциальными переполнениями буфера.
* Наведён больший порядок с типами, убраны вызовы deprecated и переходных функций.
* Небольшие оптимизации.

1.5.0.140 (18.6.2016):
* Сборка в Visual Studio 2015 update 2.

1.5.0.139 (18.6.2016):
* Исправлена ошибка при обработке пустого входного выражения, например при вводе только пробелов, добавлена соответствующая ошибка "Выражение не найдено".
* Ядро программы теперь работает с utf-8 строками, а в wide char и обратно строки конвертируются с помощью CalculatorWideAdapter.
* Немного почищен код.

1.4.1.138 (8.4.2013):
* Сборка в Visual Studio 2012 update 2.

1.4.0.136 (28.1.2013):
* Переход на Visual Studio 2012.
* 64х битная версия калькулятора теперь работает только под ОС не младше Windows Vista (Windows Server 2008R2).
* PVS: ложные срабатывания.

1.3.5.134 (15.7.2012):
* Вернулся на Visual C++.

1.3.4.133 (17.5.2012):
* Более жёсткая оптимизация со стороны компилятора + автораспараллеливание.
* Мелкие оптимизации кода.

1.3.3.132 (2.4.2012):
* Операция деления на нуль теперь допустима.
* Переход на компилятор Intel C++ Compiler XE 12.1.
* Убрал поддержку старых ОС (до WinXP).
* Мелкие оптимизации кода.
* Исправлены потенциальные ошибки и убраны ложные срабатывания (PVS-Studio)

1.3.2.129 (12.12.2010):
* Оптимизация (PVS-Studio)
* Отформатировал исходники Astyle

1.3.1.127 (14.09.2010):
* Обновил адрес сайта

1.3.0.126 (23.08.2010):
! Исправлена ошибка с заменой констант (не правильно считались выражения с константами без степенного символа)
! Оптимизирована предварительная проверка строки на валидность
! Небольшая оптимизация в замене констант
! Небольшая оптимизация в обработчике функций
! Оптимизировал обработчик RPN
* Убрал мусорок из кода

1.2.1.121 (13.08.2010):
! Заменил переключатели в вычислителе функций на массив указателей на функции
* Отключил минимальную пересборку в проекте
* Отформатировал исходники Astyle

1.2.0.120 (10.06.2010):
! Рефакторинг замены констант
! Рефакторинг системы ошибок
- Убрал избыточную ошибку: "Некорректное использование символа e сразу после показателя степени в позиции %d следует ещё один символ e"
+ В реллизных сборках теперь считается контрольная сумма
! Увеличил точность результатов до 15 знаков после запятой
~ Проставил в своих файлах год копирайта и тип лицензии, на основании которой распространяется исходный код приложения: GNU General Public License version 3
* Косметика кода
* Обновил ресурсы

1.1.1.111 (24.04.2010):
! Исправлена ошибка в алгоритме, добавленная в 1.1.0.107

1.1.1.109 (24.04.2010):
! Исправил ошибку, вызывавшую утечку памяти, появилась в версии 1.1.0.107
+ Добавил автоматическое убирание пробелов из выражения

1.1.0.107 (23.04.2010):
+ Добавил в диалог "О программе" ссылку на сайт
- Убрал опцию "Научный вид результата"
+ Добавил опцию "Авто вычисление результата" по умолчанию включена
! Исправил компиляцию debug версий
* Сделал юникодное ядро, это значительно увеличит скорость обработки, т.к. на входе и выходе теперь не потребуется преобразовывать строку
* Оптимизация алгоритмов
* Исправлен вывод в лог промежуточных значений

1.0.10.104 (23.04.2010):
! Исправил проверку на максимально (минимальное) доступное значение

1.0.9.102 (23.04.2010):
* Сборка в Visual Studio 2010
* Мелкая оптимизация кода на скорость кода
* Доделал вывод сообщений с помощью нового метода

1.0.8.100 (21.04.2010):
+ Добавлена функция sqrt (square root)
! Переработка обработчика сообщений и ошибок
+ Появилось возможность выбора в каком формате выводить число: в обычном или научном
! Теперь результат выводится в коротком формате, если это возможно

1.0.7.99 (1.12.2009):
* перевёл вычисления в "научный формат"
! исправил ошибки при вычислении ф-й:
- если в качестве параметра передавалось число со степенью, результат вычислялся не верно
- если в качестве параметра передавалась константа записанная с ошибками, вычисление производилось так, как будто был передан 0
- убрал из лога промежуточные строки (оставил только для Debug версии)
* обновил диалог "О программе"
* удалил мусор из репозитория

1.0.6.96 (29.11.2009):
- выкинул мусорок
! исправил ошибку при проверке валидности строк (сломал в версии 1.0.5.95, не работала функция log10(x))

1.0.5.95 (26.11.2009):
+ добавлен контроль ошибок:
- Закрывающая скобка находится раньше открывающей
- Запись числа перед открывающей скобкой недопустима
! исправлена ошибка в анализе аргумента ф-й (после последних оптимизаций отвалились отрицательные аргументы :)
* косметика в версиях разрешённых ОС
* исправлена ошибка при обработке строки вида (2+2)-(2+2)
* добавлен хак для исправления обработки строк вида (2+2)+-(2+2) и (2+2)--(2+2) , TODO переписать по нормальному
* добавлена временная заглушка (он же хак) для обработки строк вида 2+-(2+2) и 2--(2+2) , TODO переписать по нормальному
* оптимизировал работу с функциями и константами
- выкинул лишний код

1.0.4.88 (21.11.2009):
* заэкранировал в _DEBUG_FUNCTION самодельные ф-и (plus3, plus5, spin)дабы в релиз не попадало
! исправил ошибку с коррекцией count-a (отображается в сообщениях об ошибках) при обработке ф-й
! исправил ошибку с неверным номером аргумента передаваемого обработчику ошибок
! исправлена ошибка при наличии большого числа скобок в последнем аргументе ф-и
! исправлено использование константы в качестве параметра ф-и
! исправлена ошибка с неверным отображением параметров у функции, если их количество не верно
* косметика кода
* исправил ошибку в версии

1.0.3.84 (17.11.2009):
! исправлено несколько ошибок с использованием символа e как в спени так и содержащегося в именах ф-й
! исправлено возможное падение

1.0.2.82 (14.11.2009):
! исправлена ошибка при замене констант

1.0.1.77 (12.11.2009):
* теперь вычисления производятся в long double
+ обработка ошибки "e+-"
+ строка вида "1e-1e-1" считается ошибкой
+ добавлены ошибки при использовании числа со степенью (символ 'e')
- убрал ненужные модификаторы static
* косметика и наведение порядка
* доделал условия проверки констант

1.0.0.71 beta (10.11.2009):
+ добавлено несколько ф-й
* кое где заменил scanf на atof
* ограничил точность 14ю знаками после запятой
! исправлена часть ошибок в обработке констант
! исправлена ошибка в определении ф-и, ранее например вместо asin вызывался sin и выдавалась ошибка
+ добавлена поддержка произвольных вложенных выражений в качестве параметров ф-й
* вынес работу с функциями в отдельный модуль
* небольшие отимизации по ходу дела

1.0.0.68 beta (9.11.2009):
* значительные оптимизации кода:
- рефакторинг обработчика ф-й
- выкинуто много мусорка
+ добавлена поддержка вложенных выражений, пока без скобок
+ добавлено много мыслей и дополнительные ф-и, пока в комментариях

1.0.0.67 beta (8.11.2009):
+ добавлена поддержка констант
+ добавлена функция exp(x) , при x=1 получаем просто число e
* дальнейшая оптимизация кода
- удалил флаг _USE_Function
+ добавил 64х битную версию

1.0.0.66 beta (8.11.2009):
* косметика интерфейса
* глобальный рефакторинг проверки ошибок (функции не трогал):
- из RPN преобразователя убрал l_old_prioritet
- убрал несколько сомнительных моментов
- убрал различного рода мусорок из кода и интерфейса
+ добавлена поддержка выражений вида 1e-3 и подобных (степенных)
! пофиксил ошибки, вызванные разбором на модули
+ добавил одну ошибку в обработке ф-й
* разнёс код по модулям
- убрал глобальные переменные
* временно закоментил коррекцию длины числа, ибо не работает, а отлаживать влом :)
* косметика и рефакторинг кода
* первое приближение к поддержки сложных вложенных выражений и вложенных функций
+ Добавлена рекурсия для последнего оператора
* исправлено пара ошибок
+ добавлена поддержка вложенных выражений
+ поддержка функций с параметрами в виде конечных цифр, проверки многих ошибок ещё нет
* первое приближение к реализации функций
* расставил экранчики

1.0.0.48 beta (26.10.2009):
! убрал появлении дополнительной ошибки

1.0.0.47 beta (26.10.2009):
! исправил рассчёт степенной функции пример: 2^2
* рефакторинг обработки ошибок со скобками
+ добавил предупреждение о слишком большом числе
* рефакторинг не совсем прямого кода)
* рефакторинг системы сообщений и ошибок, убрал бессмысленные флаги состояния, обработчики теперь не возвращают значение
- удалил мёртвую иконку из репки

1.0.0.45 beta (24.10.2009):
- убрал криво-работающую проверку скобок
+ обновил иконку на свою
* косметика кода
* найдена куча ошибок, спасибо m/\dne

1.0.0.43 alpha (24.10.2009):
* рефакторинг прямого вычислителя
+ добавил проверку на пустые скобки
+ добавил "суслико устойчивость"

1.0.0.40 alpha (23.10.2009):
* небольшой рефакторинг процедуры сообщений
* убрал пока что лишний код

1.0.0.39 alpha (23.10.2009):
- удалил мусорок
* косметика сообщений

1.0.0.38 alpha (23.10.2009):
+ добавил поддержку отрицательных чисел
! при наличии ошибок выходная строка очищается
* небольшая оптимизация прямого вычислителя
* косметика кода
* добавил мысли
+ "научил" прямой вычислитель работать со скобками
* косметика кода
! убрал мусор из выходной строки

1.0.0.32 alpha (9.10.2009):
* рефакторинг структуры обработчика
* перевёл обработку на double
* рефакторинг выходного парсера
* поправил добавление сообщений в лог
* исправил работу с "длинной" последовательностью операторов

1.0.0.29 alpha (2.10.2009):
* рефакторинг системы сообщений
* буферы теперь имеют статические адреса -> повысится скорость, повысится потребление памяти
* косметика кода и приведение его к порядку
* добавил в проект недостающий хидер
! исправил маленькую ошибку в преобразователе в обратную польскую запись
- убрал пробелы из выходной строки
* подготовил выходную ф-ю к рекурсии
! исправил маленькую ошибку
* косметика

1.0.0.26 alpha (2.10.2009):
! исправил работу преобразователя в польскую запись
* начал писать выходной обработчик
* дальнейшая доработка контроля ошибок
* удалил мусорок
! исправил "размножение" записей в логе
* рефакторинг системы ошибок
! исправлена ошибка в модуле приоритетов
- удалил мусор из интерфейса
+ добавил проверку деелния на 0
+ добавил проверку корректности символов при составлении обратной польской записи
+ добавил проверку на валидность входных символов
* набросал ф-ю конечного рассчёта для RPN
+ добавил поддержку функций для RPN
* окончательно доделал функцию получения обратной польской записи
* теперь к красиво выводящимся промежуточным строкам выводятся комментарии
+ добавлен алгоритм стекового вычислителя для RPN
+ добавлена проверка количества скобок в выражении
! пофиксил трансляцию ошибок
+ очищаем строку результата при наличии ошибок для RPN
+ написана конструкция поиска и замены членов для RPN