中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【厉害】纯批计算圆周率,精确到小数点100位
« [1] [2] [3] »
作者:
标题: 【厉害】纯批计算圆周率,精确到小数点100位 上一主题 | 下一主题
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 16 楼』:  

这个VBS的很快,不过受VBS限制位数
n=100
for i = 1 to n
  str=2+(n+1-i)/((n+1-i)*2+1)*str
next
msgbox str
如果转为批处理则为:
@echo off
setlocal EnableDelayedExpansion
set str=1
for /l %%i in (100,1,1) do set/a str=2+%%i/(%%i*2+1)*!str!
echo %str%
pause
可惜set/a不能计算小数



2008-4-30 17:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 17 楼』:  



  Quote:
Originally posted by zh159 at 2008-4-30 05:11 PM:
这个VBS的很快,不过受VBS限制位数
n=100
for i = 1 to n
  str=2+(n+1-i)/((n+1-i)*2+1)*str
next
msgbox str
如果转为批处理则为:
[code]@echo off
setlocal E ...

这用的就是方案2,很好,小数计算你看不得不爱版主的那个代码看怎么样?



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-30 17:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 18 楼』:  

'将那个C的代码用VBS处理了下,速度很快,因为是
'每位用一个数处理的,所以没有位数限制。
'恩,记得用CScript调用……
Dim b, c, d, e,n, f()
n = 100 '在这里定义位数
c = n / 4 * 14
ReDim f(c)
For b = 0 To c
    f(b) = 2000
Next

Do While
(c)
   
b = c
    d = f(b) * 10000
    f(b) = d Mod (b * 2 - 1)
   
d = d \ (b * 2 - 1)
   
b = b - 1
    Do While(b)
        
d = d * b + f(b) * 10000
        f(b) = d Mod (b * 2 - 1)
        
d = d \ (b * 2 - 1)
        
b = b - 1
    Loop
   
c = c - 14
    i = e + d \ 10000
    i = Right("0000" & i,4)
   
If k < 10 Then
        
k = k + 1
        ShowLine = ShowLine & i
    Else
        
k = 0
        WSH.Echo ShowLine
        ShowLine = ""
    End If
   
e = d Mod 10000
Loop
WSH.Echo ShowLine

   此帖被 +10 点积分       点击查看详情   
评分人:【 zh159 分数: +10  时间:2008-5-1 00:57


2008-4-30 23:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 19 楼』:  

数字不要太大哦~1000差不多也就1秒~
加个0就…………

  Quote:
'将那个C的代码用VBS处理了下,速度很快,因为是
'每位用一个数处理的,所以没有位数限制。
'恩,记得用CScript调用……

'这个是连续运算最后输出,比一行一行的输出速度快。

Dim b, c, d, e,n, f()
n = 1000 '在这里定义位数
c = n / 4 * 14
ReDim f(c)
For b = 0 To c
    f(b) = 2000
Next

Do While
(c)
   
b = c
    d = f(b) * 10000
    f(b) = d Mod (b * 2 - 1)
   
d = d \ (b * 2 - 1)
   
b = b - 1
    Do While(b)
        
d = d * b + f(b) * 10000
        f(b) = d Mod (b * 2 - 1)
        
d = d \ (b * 2 - 1)
        
b = b - 1
    Loop
   
c = c - 14
    i = e + d \ 10000
    i = Right("0000" & i,4)
   
If k < 10 Then
        
k = k + 1
        ShowLine = ShowLine & i
    Else
        
k = 0
        'WSH.Echo ShowLine
        
ShowLine = ShowLine & vbCrLf
    End If
   
e = d Mod 10000
Loop
WSH.Echo ShowLine



2008-4-30 23:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 20 楼』:  

恩,这个算法没有浮点运算哦~

+-*/取余运算。
有功夫的试这改成BAT吧。

没有看最大的数是多少,希望BAT可以支持到。

2008-4-30 23:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xtanbmy
初级用户




积分 47
发帖 31
注册 2008-3-17
状态 离线
『第 21 楼』:  

好牛X,膜拜了!

2008-5-1 03:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xtanbmy
初级用户




积分 47
发帖 31
注册 2008-3-17
状态 离线
『第 22 楼』:  

大虾们,能不能把结果输出到一个文本文件中呀?

2008-5-1 03:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 23 楼』:  



  Quote:
Originally posted by xtanbmy at 2008-5-1 03:52:
大虾们,能不能把结果输出到一个文本文件中呀?

把SHOWLINE前的echo换成FSO对象,文本读写操作的对象,然后write下……

在CSCRIPT下可以复制结果嘛。。。

2008-5-1 08:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 24 楼』:  

古算术法

  Quote:
355/113=3.1415926535897...





菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
2008-5-1 08:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 25 楼』:  



  Quote:
Originally posted by PPdos at 2008-5-1 08:54:
古算术法


=。=
你自己打的吧?还是我的CALC有问题呢?

2008-5-1 09:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 26 楼』:  



  Quote:
Originally posted by PPdos at 2008-5-1 08:54:
古算术法


这个只能精确到6位



2008-5-1 10:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 27 楼』:  

弱弱的问一句,圆周率 可以理解为 a 除以 b 吗?是两个正整数吗?
貌似那个 1 除以 2003 的代码可以更简单,精确到 任意位小数。(cmd 范围内)



致精致简!
2008-5-2 12:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 28 楼』:  

不存在a/b=Pi的a和b的值……

2008-5-2 12:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 29 楼』:  

难怪我看到网上说用 22除以7 ,我用计算器算结果却不对。。



致精致简!
2008-5-2 12:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 30 楼』:  

if "π"=="无理的数"  echo π 不可以用分数来表示



简单!简单!再简单!
2008-5-2 12:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: