Board logo

标题: 开平方(精度为小数点后5位) [打印本页]

作者: dreamseed     时间: 2008-4-5 16:51    标题: 开平方(精度为小数点后5位)
算法思路由 terse 提出。本人扩大了可行域。
@echo off
set /p n=输入待开方数(0~89999999):
set a=2
:acr
set /a a=(n/a+a)/2,b=a*a
if %b% gtr %n% goto :acr
if %b% lss 0 goto acr
if %b% equ %n% goto :ok
set /a t=n-b,k=a
:loop1
set /a t*=100,x=k*20,m=10
:loop2
set /a m-=1,s=m*(m+x)
if %s% gtr %t% goto loop2
set /a t-=s,c+=1,k=k*10+m,r=r*10+m
if %c% lss 5 goto loop1
:ok
if not "%r%" == "" set a=%a%.%r%
echo 结果:%a%
pause>nul
[ Last edited by dreamseed on 2008-4-5 at 05:13 PM ]

作者: PPdos     时间: 2008-4-5 17:08    标题: set /?
() - 分组 ! ~ - - 一元运算符 * / % - 算数运算符 + - - 算数运算符 << >> - 逻辑移位 - 按位“与” ^ - 按位“异” | - 按位“或” = *= /= %= += -= - 赋值 &= ^= |= <<= >>= , - 表达式分隔符
利用逻辑运算符

作者: dreamseed     时间: 2008-4-5 17:12
能具体写一个么?

作者: plp626     时间: 2008-4-5 18:04
批处理搞数学计算尤其是小树 ,还真没研究过, 这样的帖子就当娱乐,可以作为一个小函数备用, 研究下算法 --------------------------- 纯计算数学的问题,主要是迭代公式:Xn+1=(Xn+A/Xn)/2 极限----->A^(1/2) 楼主初始时把X1设为2,然后在:acr模块迭代计算A^(1/2)的整数部分, if %b% lss 0 goto acr不是多余的,用来防止溢出为负数,我疏忽了 另外将X1设为n/2可以减少迭代次数, 后面计算小数,谁分析下,我没耐心了 [ Last edited by plp626 on 2008-4-5 at 06:46 PM ]

作者: xtanbmy     时间: 2008-4-7 19:02
下一个看一下,谢谢。