标题: [数值计算] [分享]批处理使用牛顿迭代法快速求平方根或近似值 [打印本页]
作者: batman 时间: 2009-4-26 03:50 标题: [分享]批处理使用牛顿迭代法快速求平方根或近似值
- @echo off
- rem 原理来源于牛顿迭代法,只能计算1-214748,保留两位小数
- set /p a=请输入数:
- set /a a*=10000,b=a
- for /l %%a in (1,1,100) do set /a b=(b+a/b)/2
- set /a c=b*b,a/=10000
- echo %a%的平方根或近似值为:%b:~,-2%.%b:~-2%
- echo %b:~,-2%.%b:~-2%*%b:~,-2%.%b:~-2%=%c:~,-4%.%c:~-4%
- pause>nul
复制代码
[ 本帖最后由 batman 于 2009-4-26 03:54 编辑 ]
作者: xxx 时间: 2009-4-26 07:28
建议各位版主可以多找点这样的数学题...有时讨论算法也是件好事.
作者: defanive 时间: 2009-4-26 09:51
无数年前写的东西,算法是(n/x+x)/2,精度最高0.0001,支持1~999999999- @echo off
- setlocal enabledelayedexpansion
- ::Made By Defanive
- :start
- cls
- echo 由于CMD位数计算的限制,精确度最高0.0001
- echo 越大的数字数字精确度越来越低
- echo Made By Defanive
- echo.
- set/p type=输入一个整数:
- if %type% gtr 999999999 goto start
- if %type% lss 1 goto start
- set/a xn=type
- set/a times=1
- if %type% geq 99 set/a times=2
- if %type% geq 9999 set/a times=3
- if %type% geq 999999 set/a times=4
- if %type% geq 99999999 set/a times=5
- for /l %%a in (1,1,4) do (
- set/a yn=!xn!*100
- set/a zn=!yn!/100
- if not !yn! lss 0 (
- if !xn!==!zn! (
- set/a xn=!yn!
- )
- )
- )
- set/a sn=xn
- set sqn=1
- for /l %%a in (1,1,20) do (
- set/a sqn=sn/sqn+sqn
- set/a sqn=sqn/2
- )
- echo.
- echo √%type% ≈ !sqn:~0,%times%!.!sqn:~%times%!
- pause>nul
- goto start
复制代码
[ 本帖最后由 defanive 于 2009-4-26 12:28 编辑 ]
作者: Batcher 时间: 2009-4-26 12:18 标题: 回复 3楼 的帖子
无数年前你不知道使用缩进,但是现在贴代码出来的时候应该缩进一下啊。
^_^
作者: defanive 时间: 2009-4-26 12:25 标题: 回复 4楼 的帖子
有道理,不过话说那个时候我的批处理还是个小菜。。。
——————
貌似论坛不支持缩进啊,怎么显示#160;?
[ 本帖最后由 defanive 于 2009-4-26 12:27 编辑 ]
作者: Batcher 时间: 2009-4-26 12:50 标题: 回复 5楼 的帖子
用空格控制缩进吧
作者: Batcher 时间: 2011-4-3 18:13
7# 嗜血魂歌
请问你发现哪个DOS里面不能输入小数?
作者: 1055367558 时间: 2017-9-15 19:10
回复 3# defanive
可以加个for/l。。减点代码
作者: m91opse 时间: 2018-5-10 04:24
高手,请问有没有支持小数求平方根或近似值计算批处理
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |