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

[数值计算] 批处理如何更准确地计算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计算...)

http://zh.wikipedia.org/wiki/E_(%E6%95%B0%E5%AD%A6%E5%B8%B8%E6%95%B0)

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

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

TOP

返回列表