Calc - калькулятор для Windows, так же возможен запуск под Linux и OSX в Wine
Актуальная версия 2.0.4.226 (06.07.2023)



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



Calc Программа поддерживает:
 Константы:
 "pi" пи, архимедова константа
 "e" е, число эйлера
 "egamma"
 "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) ).
 "deg" преобразование радиан в градусы.
 "exp" функция экспоненты, при x=1 возвращает значение равное числу e
 "ln" или "log" натуральный логарифм (по основанию e)
 "lg" или "log10" логарифм с основанием 10
 "lb" или "log2" логарифм с основанием 2
 "pow" степень, данная функция так же может извлекать корни, например pow(2,1/5) эквивалентно корню 5 степени из 2
 "sqrt" квадратный корень
 "cbrt" кубический корень
 "sh"
 "ch"
 "tanh"
 "abs"
 "arsinh"
 "arcosh"
 "artanh"
 "tgamma"
 "lgamma"
 "riemann_zeta"
 "trunc"
 "round"
 "max" максимум из нескольких значений
 "min" минимум из нескольких значений
 "hypot" для двухмерного (x, y) или трёхмерного пространства (x, y, z)
 "assoc_legendre"
 "assoc_laguerre"
 "legendre"
 "laguerre"
 "beta"
 "erf"
 "erfc"
 "comp_ellint_1"
 "comp_ellint_2"
 "comp_ellint_3"
 "cyl_bessel_i"
 "cyl_bessel_k"
 "cyl_neumann"
 "sph_bessel"
 "sph_legendre"
 "sph_neumann"
 "ellint_1"
 "ellint_2"
 "ellint_3"
 "expint"
 "hermite"
 "fma"
 Операции:
 + сложения
 - вычитания
 * умножения
 / деления
 ^ операция степени (эквивалентна функции pow)
 % операция взятия остатка от деления
 Выражения со скобками
 Числа содержащие показатель степени, например 1.4e-3 (эквивалент 1.4*10^-3)
 Точность результата 14 знаков


Для работы программы необходимо установить Microsoft Visual C++ Redistributable Package:
Для 32х битных платформ
Для 64х битных платформ




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


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

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




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



Актуальная версия: 2.0.4.226 (06.07.2023).

2.0.4.226 (06.07.2023):
* Added many physicals constant, values for some update.

2.0.3.223 (29.06.2023):
* Cleanup for GUI code.

2.0.3.220 (24.06.2023):
* Small redesign and GUI code cleanup.
* Added special fma function and error functions: erf, erfc.

2.0.2.218 (23.06.2023):
* Added many special math functions.
* Build in Visual Studio 2022 (17.6.4).

2.0.1.213 (10.06.2023):
* Precision reduced from 15 to 14 numbers.
* Warnings temporary disabled.

2.0.0.204 (07.06.2023):
* Now product is unlicensed.
* Code quality improvements.
* Optimize code generation settings for maximum performance.
* Unification of the hypot2 and hypot3 function. Now it's the function named hypot for 2 and 3 parameters.
* Now ANSI synonyms for functions log, log10, log2 can be use: ln for log; lg for log10; lb for log2.
* Added the function riemann_zeta.
* Added the constant egamma.
* Improvements for error handling when calling a function with variadic parameters. Currently this is min and max functions.

2.0.0.197 (03.06.2023):
* The maximum precision is reduced from 17 to 15 digits.
* Added warning about precision.
* Added additional errors detection.
* Improvements in report.
* Stability improvements.

2.0.0.195 (03.06.2023):
* Optimization for speed.
* Fix incorrect error messaging when function and constant parsing.
* Added minimum version support for Windows 7 SP1 and newer.

2.0.0.189 (01.06.2023):
* New core with lexer and parser, that have properly architecture.
* The great gratitude of my beloved for helped me understand how parsers works. I sincerely consider her very smart and cool.
* Build in Visual Studio 2022 (17.6.2).

1.13.3.182 (29.05.2023):
* optimizing for rad function, added function deg.
* operation % now support floating values.

1.13.2.179 (31.03.2022):
* Build in Visual Studio 2022 (17.5.3).

1.13.1.178 (31.03.2022):
* Code quality improvements.
* Cleanup legacy code.
* Small optimization.

1.13.0.177 (31.03.2022):
* Added warnings support.
* Added operator % : it's reminder operator for integers only.
* Cleanup for all unusable variables (PVS).
* Small optimization in the functions calls (PVS).
* Build in Visual Studio 2019 (16.11.25).

1.12.0.175 (08.09.2022):
* The program use the English language now.
* Cleanup for all unusable comments.
* Small optimization in the functions calls (PVS).
* Complete deprecation of legacy CalculatorWideAdapter.
* Build in Visual Studio 2019 (16.11.18).

1.11.1.174 (11.11.2021):
* Сборка в Visual Studio 2019 (16.11.6).

1.11.0.173 (22.7.2021):
* Исправлена компиляция.

1.11.0.171 (22.7.2021):
* Сборка в Visual Studio 2019 (16.10.4).
* Обновлены данные разработчика.

1.10.1.171 (5.5.2020):
* Добавлена обработка ошибки "запись числа после функции недопустима".

1.10.0.170 (27.4.2020):
* Добавлена константа "e" - число Эйлера.
* Рефакторинг парсера линейных выражений: оптимизация, возврат числа вместо строки, убраны лишние действия.
* Рефакторинг обработки функций: оптимизация, убраны лишние конвертации в строку, исправление ошибок, добавлены проверки на некорректное написание числа.
* Добавлена обработка ошибки "у функции отсутствует закрывающая скобка".
* Добавлена обработка ошибки "запись числа перед функцией недопустима".
* Из лога убраны избыточные сообщения.

1.9.1.162 (18.4.2020):
* Рефакторинг парсера линейных выражений: исправлены ошибки.
* Отключена сложная избыточная проверка входной последовательности.
* Оптимизация обработки функций.

1.9.0.160 (18.4.2020):
* Добавлены новые функции "sqrt", "cbrt", "sh", "ch", "tanh", "abs", "log2", "log1p", "arsinh", "arcosh", "artanh", "tgamma", "lgamma", "trunc", "round", "max", "min", "hypot2", "hypot3".
* Исправлена входная валидация аргументов функций более чем с одним параметром.
* Исправлена ошибка при проверке параметров функций.
* Оптимизация.
* Сборка в Visual Studio 2019 (16.5.4).
* Прекращена поддержка Windows XP и для 32 битной сборки, для 64 битной прекращена уже давно.

1.8.5.157 (30.9.2018):
* Сборка в Visual Studio 2017 update 5.
* В диалог "О проекте Calc" добавлен вывод времени и даты сборки.

1.8.4.156 (29.9.2018):
* Оптимизация.

1.8.3.155 (7.9.2018):
* Оптимизация.

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