[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理计算根号(1-99)

本帖最后由 a2002 于 2017-7-8 12:08 编辑

这是一个计算2次方根的程序(1到99以内的数),源码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p "a=数(1-99):"
  3. set /p "loop=保留的有效数字:"
  4. set s=0&set r=&set y=!a!
  5. :loop
  6. if "!loop!" equ "!_loop!" goto :ans
  7. set /a _loop+=1
  8. for /l %%a in (1,1,10) do (
  9. set /a t1=s*20*%%a+%%a*%%a
  10. if !t1! gtr !y! (
  11. set /a n=%%a-1,_s=s*20*n+n*n,y=y*100-_s*100
  12. set r=!r!!n!&set s=!r!
  13. if !y! equ 0 goto :ans
  14. goto :loop
  15. )
  16. )
  17. :ans
  18. echo 结果:!r:~0,1!.!r:~1!
  19. pause>nul
复制代码
大于100、小于1的数原理相同,不再详述
3

评分人数

原理:
这是一个很少有人知道的笔算法
例子:计算根2
2=1*1+1                                  ;第一位,1,余数,1
余数*100:1*100=100             ;便于除
商4,(1*20+4)*4=96            ;商4
100-96=4                                 ;余数
4*100=400                              ;便于除
商1,(14*20+1)*1=281        ;商1
400-281=119                           ;余数
119*100=11900                      ;便于除
…………

TOP

竖式:

TOP

由于P计算最大为2^31-1,所以有时末尾不能显示,正常现象

TOP

本帖最后由 523066680 于 2017-7-8 12:45 编辑

是牛顿迭代法?忘得差不多了

你肯定不知道卡马克,卡神。

TOP

本帖最后由 a2002 于 2017-7-8 13:08 编辑
你肯定不知道卡马克,卡神。
523066680 发表于 2017-7-8 12:42



    这个确实不知道,毕竟没高中嘛,没必要懂那么多
原创区不能发,帖子随便放

TOP

本帖最后由 523066680 于 2017-7-8 13:19 编辑

回复 6# a2002

    卡马克是个传奇,也不是说高中不高中。
他在自己开发的3D游戏的源码中,用了一个神奇的数字,快速求平方根。

http://blog.chinaunix.net/uid-9255716-id-107951.html

http://www.matrix67.com/blog/archives/362

传奇事迹:
http://baike.baidu.com/link?url= ... oAm0ZHJtsjPEjzSESGW
1

评分人数

TOP

回复 1# a2002
这个算法在1985年之前,几乎所有初中的学校都会教的,是笔算开平方的算法。我在小学时研究过,当时改进到了笔算开立方(开立方时: 3*结果的平方)。

而卡马克算法  只在快速估算有限精度的开方,因为当时还没有FPU浮点指令集,卡马克在写游戏时,尤其在3D图形编程时,经常遇到开方之类的,当时的C库效率也不是很高,于是他鬼使神差的整出了0x5f3759df这个值(后来证实换成0x5f375a86会更好)。

TOP

If you really like game development, then you must know John Carmack.

TOP

回复 8# happy886rr


    都是很厉害的了,小学就能研究^1/3,佩服
原创区不能发,帖子随便放

TOP

回复 8# happy886rr


    ^1/3还要*30、+平方,才算到4位,余数就8位了,那方法特别难算
原创区不能发,帖子随便放

TOP

回复 11# a2002
是啊,批处理溢出了。不过这个貌似用C语言才能实现最佳性能。脚本语言只能满足一般精度,但C语言可以做任意精度的高精度计算。

TOP

回复 12# happy886rr


    不过return可以是小数吗?(我C语言渣de一B)
原创区不能发,帖子随便放

TOP

本帖最后由 523066680 于 2017-7-8 23:22 编辑

回复 13# a2002

如果自定义函数声明类型是 float/double, 就可以是浮点数
返回值要求是整数的,只有 main 这样的函数。

不过这没有关系,不管是浮点数还是整数,在底层,一切都是数字。浮点数就是有个单元存储了小数点所在的位置。

推荐 《Linux C编程一站式学习》,非常适合查阅和练习。有在线版(地址忘了。

TOP

回复 14# 523066680


    还有这个int main()类型可以改吗?
原创区不能发,帖子随便放

TOP

返回列表