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

[数值计算] 批处理如何更准确地计算e的值?

[复制链接]
发表于 2013-1-13 13:33:46 | 显示全部楼层 |阅读模式
  1. setlocal delayexpansion
  2. set a=1
  3. set b=1
  4. set c=10000000
  5. @echo off
  6. @cls
  7. :loop
  8. set /a c=c+(10000000/b)
  9. set /a a=a+1
  10. set /a b=b*a
  11. if %a% equ 500 goto :ex
  12. goto :loop
  13. :ex
  14. set /a c=c-20000000
  15. @echo E is 2.%c%
  16. @echo off
  17. @pause>nul
复制代码
e本来等于2.718281828...
但是它只给出e=2.7182814和一大堆Divide by zero error.
如何更准确地计算e?(bat计算...)
 楼主| 发表于 2013-1-13 13:37:34 | 显示全部楼层
http://zh.wikipedia.org/wiki/E_(%E6%95%B0%E5%AD%A6%E5%B8%B8%E6%95%B0)
发表于 2013-1-13 14:35:15 | 显示全部楼层
本帖最后由 batman 于 2013-1-13 14:51 编辑

批无法直接计算浮点同时cmd只能计算2^31内的值(-2147483648-2147483647),用VBS计算循环到171次也就是b=171!时溢出:

  1. Dim a, b, c
  2. b = 1 : c = 10000000
  3. For i = 1 To 500
  4.   On Error Resume Next
  5.   a = a + 1
  6.   b = b * a
  7.   c = c + 10000000 / b
  8.   If Num = "" And Err.Number <> 0 Then Num = i
  9.   Err.Clear
  10. Next
  11. c = c - 20000000
  12. WScript.Echo "E=2." & c & vbCrLf & Num
复制代码
发表于 2013-1-16 16:48:59 | 显示全部楼层
本帖最后由 terse 于 2013-1-16 17:40 编辑

再简化一行
一处笔误  貌似没变化

  1. @echo off&setlocal enabledelayedexpansion
  2. set lp=100
  3. set /a A=10000,M=1000
  4. set/aLp=(Lp+3)/4*14
  5. for /l %%i in (%LP% -1 1) do set/a "S+=M*A,R_%%i=S%%%%i,S/=%%i"
  6.    set /a "E=S/A+M,M=S%%A,Lp-=14"
  7.    set _E=%_E%%E:~,4%
  8.    for /l %%i in (!Lp! -14 1) do (
  9.        for /l %%j in (%%i -1 1) do set/a "S+=R_%%j*A,R_%%j=S%%%%j,S/=%%j"
  10.        set /a "E=S/A+M,M=S%%A+A"
  11.        set _E=!_E!!E:~-4!
  12.    )
  13. )
  14. echo;!_E!
  15. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:25 , Processed in 0.017283 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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