Calc - калькулятор для Windows, так же возможен запуск под Linux и OSX в Wine
Актуальная версия 2.0.5.231 (12.07.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"
"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 знаков
Исходники можно посмотреть тут
Для анонимного доступа введите 'demo' и 'demo' в поля для логина и пароля
Текущая версия 2.0.5.231 (12.07.2024)
Для 32х битных платформ
[416K]: скачать
Для 64х битных платформ
[434K]: скачать
История версий:
Актуальная версия: 2.0.5.231 (12.07.2024).
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