Board logo

标题: [数值计算] 批处理如何更准确地计算e的值? [打印本页]

作者: chineseman2    时间: 2013-1-13 13:33     标题: 批处理如何更准确地计算e的值?

  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计算...)
作者: chineseman2    时间: 2013-1-13 13:37

http://zh.wikipedia.org/wiki/E_(%E6%95%B0%E5%AD%A6%E5%B8%B8%E6%95%B0)
作者: batman    时间: 2013-1-13 14:35

本帖最后由 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
复制代码

作者: terse    时间: 2013-1-16 16:48

本帖最后由 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
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2