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

可以参考:http://www.bathome.net/redirect. ... 3032&pid=195561

TOP

本帖最后由 老刘1号 于 2019-4-6 19:40 编辑

回复 5# hongrk


    哈哈,批就别比什么效率了吧,没意义。
顺便 你那个函数有bug
call :jia 1000101000100022222222222222222222222222222222222222311 1009993333333333333333333123999999

批:
60ms
1101000100022222223232215555555555555555555346222310

我的汇编版高精度四则:
1000101000100022222223232215555555555555555555346222310


至于你问的那个问题,我只能说批的机制非常奇诡,就不要纠结了

有机会的话,我逆cmd的时候,会分析一下
1

评分人数

TOP

本帖最后由 老刘1号 于 2019-4-6 21:42 编辑

没错我又来了
1楼除法代码
200000000500002 12121244
我的高精度四则
252272727995700.2526894925268949252689492526894925268949252689492526894925268949252689492526894925268949252689492526894

顺便算了下200000000500002*44444444+12121244
高精度正负浮点数四则运算.EXE * 200000000500002 44444444
8888888822222310888888
高精度正负浮点数四则运算.EXE + 8888888822222310888888 12121244
8888888822222323010132

我的结果再算回去
高精度正负浮点数四则运算.EXE * 252272727995700.25268949252689492526894925268949252689 44444444
11212121132132132121443.99999999999999999999999999999978109916
1

评分人数

TOP

本帖最后由 老刘1号 于 2019-4-9 00:57 编辑

回复 13# hongrk


    这个如果有bug的话其实是很隐蔽的,因为复杂数字人也懒得手算,除非有现成软件验证
我最初用bat写的高精度加减一直有bug,两年之后才发现(还是自己发现的,哈哈
特别是借用批处理的变量截取等做运算,感觉需要考虑的更多,
看着lz修bug有种莫名的快感,哈哈,想当年修bug修的都想砸电脑了

分享下测试用的批,不过大多不适用于lz的函数
如果以后lz写了正负浮点数四则的话,可以用这两个测试

加法测试.bat
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY 老刘 POWERD BY iBAT
  4. rem 加法
  5. rem 整数
  6. rem 伪浮点数
  7. test + 00000001.0000 1.0
  8. rem 双0
  9. test + 000000000000000.0 0.0000000000000000000
  10. rem 无小数点带进位
  11. test + 2333 7667
  12. rem 浮点数
  13. rem 有间隔进位
  14. test + 1.80028 00.2007200
  15. rem 跨小数点连续进位(最后一位也进位)
  16. test + 2.73210962 7.26789038
  17. rem 减法
  18. rem 整数
  19. rem 大减小
  20. rem 负负得正
  21. test - 1 -2
  22. rem 带借位
  23. test - 2541 1542
  24. rem 小减大
  25. test + 2541 -2542
  26. rem 浮点数
  27. rem 连续借位
  28. test - 7.998253 6.998254
  29. rem 间隔借位
  30. test - 2.36291 0.37192
  31. pause
复制代码
测试-计算圆周率.BAT
  1. @Rem 公式:pi=2*1+2*1!/3!!+2*2!/5!!+2*3!/7!!+...+2*k!/(2*k+1)!!+...
  2. @echo off
  3. Setlocal enabledelayedexpansion
  4. ::CODER BY 老刘 POWERD BY iBAT
  5. Set Calc=高精度正负浮点数四则运算
  6. Title 任意键提高精度
  7. Set /a k=0,sss=1
  8. :loop
  9. Set /a k+=1,n=2*k+1
  10. Call :! !k!
  11. Set aaa=!Re!
  12. Call :!! !n!
  13. Set bbb=!Re!
  14. For /f %%b in ('!calc! / %aaa:~,93% %bbb:~,93%') Do Set ccc=%%b
  15. For /f %%b in ('!calc! + %ccc:~,93% %sss:~,93%') Do Set sss=%%b
  16. For /f %%b in ('!calc! * %sss:~,93% 2') Do Echo %%b
  17. rem Pause>nul
  18. Goto :loop
  19. :! 阶乘
  20. Set Re=1
  21. For /l %%a in (1 1 %1) Do (
  22. For /f %%b in ('!calc! * !re! %%a') Do Set Re=%%b
  23. )
  24. Goto :Eof
  25. :!! 双阶乘
  26. Set Re=1
  27. For /l %%a in (1 2 %1) Do (
  28. For /f %%b in ('!calc! * !re! %%a') Do Set Re=%%b
  29. )
  30. Goto :Eof
复制代码
2.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
2.9333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332
3.0476190476190476190476190476190476190476190476190476190476190476190476190476190476190476188
3.0984126984126984126984126984126984126984126984126984126984126984126984126984126984126984124
3.1215007215007215007215007215007215007215007215007215007215007215007215007215007215007215004
3.1321567321567321567321567321567321567321567321567321567321567321567321567321567321567321564
3.1371295371295371295371295371295371295371295371295371295371295371295371295371295371295371292
3.1394696806461512343865285041755629990924108571167394696806461512343865285041755629990924104
3.140578169680336862999401699092101568881754640268572157117048757915630980646460522621513333
3.1411060216013776385293413157190246973528707274837305797058119039543188149999295510131423438
3.1413584725201362703045298280188574979260132039779367818134812346684738662124582167656605662
3.141479648961140413556620313922777242201121592695155758825162513411268290794471976326869313
3.141537993173475741789108325654294156111358965040483414423379425398539680408034156856340191
3.1415661593449479692116887451108885283438873516899519378156220725648086271180296922843606148
3.1415797881375958211903566900092406439402720549074367071989652889355839239131888223301769488
3.1415863960370614463921350875357143969567010019219747772030104847517174011472053702311788076
3.1415896055882304643472845949057159341361093476147504112049752941481250900894419792116654248
3.141591166991501878487627598491122087358524218492316935854579796016647749574854383580550806
3.1415919276751469264021536771609353414925212068685672940172076302602869939395424780166744532
3.1415922987403396327019224960242588800944709572960064931209285250132817472881708167660030616
3.1415924799582244427552979657016959570861208354117326136134433805903256965979660519691635446
3.1415925685536347943369481953217763058375941091571987169653395322057694051494215002907086696
3.1415926119088356046854153289656454126734214558837034058396716915069439859299209750012520286

这个圆周率的测试其实是有问题的,如果继续算几次的话就会与实际圆周率不符,
原因是结果可以256位,输入只能93位,而输出转输入时没有做四舍五入而是直接截取,每算一次就损失一定精度。
不过做测试应该是够了,毕竟如果程序出了毛病应该连3.14都跑不出来,哈哈。

TOP

早就脱坑,对我个人而言,没有任何理由再讨论bat。(一句话:我走错片场了
523066680 发表于 2019-4-6 17:41



    真香现场

TOP

返回列表