找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 43089|回复: 9

[数值计算] [分享]批处理使用牛顿迭代法快速求平方根或近似值

[复制链接]
发表于 2009-4-26 03:50:20 | 显示全部楼层 |阅读模式
  1. @echo off
  2. rem 原理来源于牛顿迭代法,只能计算1-214748,保留两位小数
  3. set /p a=请输入数:
  4. set /a a*=10000,b=a
  5. for /l %%a in (1,1,100) do set /a b=(b+a/b)/2
  6. set /a c=b*b,a/=10000
  7. echo %a%的平方根或近似值为:%b:~,-2%.%b:~-2%
  8. echo %b:~,-2%.%b:~-2%*%b:~,-2%.%b:~-2%=%c:~,-4%.%c:~-4%
  9. pause>nul
复制代码
[ 本帖最后由 batman 于 2009-4-26 03:54 编辑 ]

评分

参与人数 2PB +11 技术 +1 收起 理由
1055367558 + 1 还可以,就是精度差了点
随风 + 11 我只能说,牛!

查看全部评分

发表于 2009-4-26 07:28:32 | 显示全部楼层
建议各位版主可以多找点这样的数学题...有时讨论算法也是件好事.
发表于 2009-4-26 09:51:08 | 显示全部楼层
无数年前写的东西,算法是(n/x+x)/2,精度最高0.0001,支持1~999999999
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::Made By Defanive
  4. :start
  5. cls
  6. echo 由于CMD位数计算的限制,精确度最高0.0001
  7. echo 越大的数字数字精确度越来越低
  8. echo Made By Defanive
  9. echo.
  10. set/p type=输入一个整数:
  11. if %type% gtr 999999999 goto start
  12. if %type% lss 1 goto start
  13. set/a xn=type
  14. set/a times=1
  15. if %type% geq 99 set/a times=2
  16. if %type% geq 9999 set/a times=3
  17. if %type% geq 999999 set/a times=4
  18. if %type% geq 99999999 set/a times=5
  19. for /l %%a in (1,1,4) do (
  20. set/a yn=!xn!*100
  21. set/a zn=!yn!/100
  22. if not !yn! lss 0 (
  23. if !xn!==!zn! (
  24. set/a xn=!yn!
  25. )
  26. )
  27. )
  28. set/a sn=xn
  29. set sqn=1
  30. for /l %%a in (1,1,20) do (
  31. set/a sqn=sn/sqn+sqn
  32. set/a sqn=sqn/2
  33. )
  34. echo.
  35. echo √%type% ≈ !sqn:~0,%times%!.!sqn:~%times%!
  36. pause>nul
  37. goto start
复制代码

[ 本帖最后由 defanive 于 2009-4-26 12:28 编辑 ]
发表于 2009-4-26 12:18:49 | 显示全部楼层

回复 3楼 的帖子

无数年前你不知道使用缩进,但是现在贴代码出来的时候应该缩进一下啊。
^_^
发表于 2009-4-26 12:25:18 | 显示全部楼层

回复 4楼 的帖子

有道理,不过话说那个时候我的批处理还是个小菜。。。

——————

貌似论坛不支持缩进啊,怎么显示#160;?

[ 本帖最后由 defanive 于 2009-4-26 12:27 编辑 ]
发表于 2009-4-26 12:50:14 | 显示全部楼层

回复 5楼 的帖子

用空格控制缩进吧
发表于 2011-4-3 18:13:40 | 显示全部楼层
7# 嗜血魂歌


请问你发现哪个DOS里面不能输入小数?
发表于 2017-9-15 19:10:10 | 显示全部楼层
回复 3# defanive


    可以加个for/l。。减点代码
发表于 2018-5-10 04:24:44 | 显示全部楼层
高手,请问有没有支持小数求平方根或近似值计算批处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 17:05 , Processed in 0.019190 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表