本帖最后由 小程936 于 2019-1-5 23:01 编辑
用法:添加至bat末尾,调用方法call :s 数字
输出值为变量b和errorlevel- :s
- set /a a=%1,b=a/2
- for /l %%a in (1,1,15) do set /a b=(b+a/b)/2
- exit /b %b%
复制代码 bug修正版- 修正bug版
- :s
- if "#%1"=="#" echo 未输入&set b=&exit /b
- set /a a=%1,b=a/2
- if "%a:~0,1%"=="-" echo 负数&set b=&exit /b
- if "%a%"=="0" set b=0&exit /b 0
- for /l %%a in (1,1,15) do set /a b=(b+a/b)/2
- exit /b %b%
复制代码 经测试,在±21亿的范围内,15次循环b=(b+a/b)/2就足以得出整数结果(截尾取整)。
如果需要计算小数,精度要求不高,也可以勉强做到。比如保留二位有效数字(截尾取整)
- set /p a=开平方数
- set /a a*=10000,b=a/2
- for /l %%a in (1,1,15) do set /a b=(b+a/b)/2
- echo %b:~0,-2%.%b:~-2%
复制代码
|