Calc - калькулятор для Windows, так же возможен запуск под Linux и OSX в Wine
Актуальная версия 2.2.0.260 (26.12.2024)
Калькулятор разбирает входную строку и на лету производит вычисление выражения
Программа поддерживает:
Константы:
"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"
"trunc"
"round"
"max" максимум из нескольких значений
"min" минимум из нескольких значений
"hypot" для двухмерного (x, y) или трёхмерного пространства (x, y, z)
"beta"
"erf"
"erfc"
Операции:
+ сложения
- вычитания
* умножения
/ деления
^ операция степени (эквивалентна функции pow)
% операция взятия остатка от деления
Выражения со скобками
Числа содержащие показатель степени, например 1.4e-3 (эквивалент 1.4*10^-3)
Точность результата 15 знаков
Исходники можно посмотреть тут
Для анонимного доступа введите 'demo' и 'demo' в поля для логина и пароля
Текущая версия 2.2.0.260 (26.12.2024)
Для 32х битных платформ
[364K]: скачать
Для 64х битных платформ
[381K]: скачать
История версий:
Актуальная версия: 2.2.0.260 (26.12.2024).
2.2.0.260 (26.12.2024):
* Precision increased from 14 to 15 numbers.
* Rewrite Lexer and Parser for maximum speedup.
* Remove dependencies from slower C functions.
* Reduce size of the classes.
* Redefine and comment Windows version requirements: The minimal version of OS supported by application is Windows 7 and require SP1 and IE11 installed.
* Using NTDDI for Windows 8 for proper working with touch interfaces.
* Tests are updated.
2.1.6.250 (16.12.2024):
* Enable parallel buildings in building script.
* Enable assembly generation for release builds by default for post build analysis.
* /LARGEADDRESSAWARE:NO
* Build in Visual Studio 2022 (17.12.3).
* Improvements in error handling.
* Fix for includes.
* Fix for types.
2.1.5.248 (31.10.2024):
* Cleanup compilation settings.
* Win32 GUI complete.
2.1.4.246 (19.10.2024):
* Type unification in the code.
* Correction of using noexcept in GUI code.
* Cleanup magic number in formatter.
2.1.3.243 (14.10.2024):
* Clean-up all tests functions for special math from release.
* Build in Visual Studio 2022 (17.11.5).
* Small code improvements.
2.1.2.242 (06.10.2024):
* Clean-up all tests functions from release.
2.1.1.241 (04.10.2024):
* Minimize decencies.
2.1.0.239 (04.10.2024):
* Refactoring and big cleanup in the GUI code.
* Improving compilation speed.
* Cleanup project settings.
* Improve in the debugging settings.
2.0.6.232 (03.10.2024):
* Small code improvements.
* Build in Visual Studio 2022 (17.11.4).
2.0.5.231 (12.07.2024):
* Added function “mod” with two arguments, that return the remainder of the division operation. This function is completely equivalent to the operator %.
* Added function “minkowski_distance” with minimum two arguments, first of it represent p, all others represent distances between points.
* Build in Visual Studio 2022 (17.10.4).
2.0.4.230 (05.07.2024):
* Code generation optimization.
2.0.4.228 (14.06.2024):
* Small optimization.
* Build in Visual Studio 2022 (17.10.2).
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