batch-file
Обходные арифметические ограничения в пакетных файлах
Поиск…
Вступление
Пакетные файлы допускают только 32-битные целочисленные вычисления, хотя это можно обойти различными подходами.
Использование powershell
Поскольку powershell устанавливается по умолчанию для каждой системы Windows с 7/2008 и выше, ее можно использовать для более сложных вычислений:
@echo off
set "expression=(2+3)*10/1000"
for /f %%# in ('"powershell %expression%"') do set result=%%#
echo %result%
Обратите внимание на дополнительные двойные кавычки в for /f
которые препятствуют конфликтам с конфликтами синтаксиса команды.
Потенциальная проблема заключается в том, что powershell намного медленнее, чем использование wsh / vbscript / jscript из-за загрузки .net framerwork
Использование jscript
WSH/JScript
устанавливается в каждой системе Windows с NT, поэтому его использование для более сложных вычислений делает его довольно портативным. JScript проще комбинировать его с пакетным файлом:
@if (@codesection==@batch) @then
@echo off
set "expression=2*(2+3)/1000"
for /f %%# in ('cscript //nologo //e:jscript "%~f0" "%expression%"') do set
result=%%#
echo %result%
:: more batch code
exit /b %errorlevel%
@end
WScript.Echo(eval(WScript.Arguments(0)));
С помощью этого подхода вы можете поместить весь свой код в один файл. Это быстрее, чем использование powershell. Здесь и здесь можно найти более сложные скрипты (которые могут использоваться как внешние файлы).
Эмуляция вычислений ручек и бумаги, реализация математических функций
- Здесь можно найти самую полную математическую библиотеку, которая эмулирует вычисления ручек и бумаги и позволяет работать с большими числами.
- Вот еще примеры эмуляции ручек и бумаги: ADD , Comparison , Multiply
- Некоторые математические функции могут быть найдены здесь .