Project1
标题:
RGSS_π(山寨Super_π)?(只是RGSS的应用)
[打印本页]
作者:
DeathKing
时间:
2009-3-15 22:07
标题:
RGSS_π(山寨Super_π)?(只是RGSS的应用)
本帖最后由 DeathKing 于 2010-9-23 02:41 编辑
(神来之笔,莫名其妙的东西……我就爱搞这些莫明堂的东西)
工程附件:
http://rpg.blue/upload_program/d/DeathKing_Ruby_PIE_117554809.rar
某日,翻阅川教版的高中一年级的《信息技术》时,偶然间发现了Quick Basic这个“神奇”的Basic语言(老的掉牙、比Visual Basic还简单)。
书上说他具有超强的计算功能,并介绍了他相关的一个利用求π公式求π值的程序,下面是Quick Basic的原代码:
这
是QuickBasic的原代码(RGSS的见下!)
REM 求圆周率的近似值
S = 0
REM 自赋值,防止后面出错
INPUT N
REM 键入一个值,赋值给N
FOR K = 1 TO N
REM 关于K的循环求倒数平方和
S = S + 1 / ( K * K )
NEXT K
REM 循环
PI = SQR ( S * 6 )
REM π的值为S的倒数和的6倍之算术平方根
PRINT “PI=”;PI
REM 屏幕回显π值
END
复制代码
以上是Quick Basic的原代码,有兴趣的朋友可以研究一下。
后来经过我的提取与改造,这个求π公式倍移植到了Ruby(RGSS,下称Ruby)上。代码如下:
#==============================================================================
# ■ Ruby_π
#------------------------------------------------------------------------------
# 通过圆周率计算公式测定计算机速度
# visit:myyxs.5d6d.com myyxs.cn.vc
# Made By DeathKing
# 特别声明!老爷机请勿试验!否则后果。。。会被220伏特掉的!
# 当然,键入数值越大,使用的时间越少,机器的处理速度越快。
# 调用方法,在脚本处使用 ppi(参数) 就可以了,参数为任意整数。
#==============================================================================
def ppi(x = 0)
start_time = Time.now # 获取当前时间。
s = 0 # 自赋值,避免后面的自运算出错。
def_pi = 3.14159265358979323
# 限定精度(已知的精度,用其与求出的精度做比较。)
$old_type = false # 使用旧风格输出?输出的数据都挤在一排
$max_x = 999999 # 设定参数的最大值
if x > $max_x.to_i # 买人寿保险。 囧~O_O 。。。
p "为防止您的出现'脚本已备份'的情况,设定了限制值。可在脚本第18行修改。"
else
for i in 0..x # π的求值公式。
i = i + 1.00 # 浮点数运算
s = s + 1 / ( i * i ) # 循环运算
end
use_time = Time.now - start_time # 获取计算使用的时间,单位:秒。
pi_n = Math.sqrt( s * 6 ) # 求算术平方根。
pi_pre = (1 - (def_pi - pi_n)) * 100
temp_p_a = "π的值为: " + pi_n.to_s # 屏幕回显π值。
temp_p_b = "精确度为: " + pi_pre.to_s + "% " # 屏幕回显精度。
temp_p_c = "消耗的时间为: " + use_time.to_s # 屏幕回显时间。
p_result = temp_p_a + "\n" + temp_p_b + "\n" + temp_p_c + "秒 "
print p_result
f = File.open("./save.txt","a")
if $old_type == false
f.write("\n" + "------------- | 记录的值 | -------------" + "\n")
f.write("π的值为: " + "#{pi_n}" + "\n")
f.write("键入的数值: " + "#{x}" + "\n")
f.write("精确度: " + "#{pi_pre}" + " %" + "\n")
f.write("消耗的时间: " + "#{use_time}" + " 秒" + "\n" )
else
f.write("值:" + "#{pi_n} | " + "键入的数值:" + "#{x}"+ " | 精确度:" + "#{pi_pre}" + " | 消耗的时间:" + "#{use_time}" + " 秒"+"\n" )
end
# 将信息写入文件。
end
end
复制代码
原理是这样的:
1)定义一个函数ppi(Print_π,π值回显),x = 0作为他的参数,即Quick Basic中的INPUT N;
2)获取当前系统时间,用于对计算此函数所耗时间进行评定;
3)对N做限制,防止一些列不可预见的情况发生;
4)调用求π公式;
5)获取当前系统时间,并与前一个时间做比较,得出消耗的时间;
6)回显时间及π值,即Quick Basic中的PRINT “PI=”;PI
7)记录到文件。
这样,这个Ruby_π就完成了。
当然,键入的值越大,消耗的时间越少,计算机的速度越快。(π值的准确率与x的大小有关,x越大,π越精确,反之,越不精确。)
这个Ruby_π存在的弊端,有如下几点:
1)速率低:
2)精度不高;
3)内存、CPU占用大。
所以,这里只是推荐大家做小测试,不建议大家使用这个程式来评价计算机,推荐使用正规的Super_π。
作者:
小小大恶魔
时间:
2009-3-15 22:23
提示:
作者被禁止或删除 内容自动屏蔽
作者:
DeathKing
时间:
2009-3-15 23:01
几乎没用……
只是间接测算计算机的处理速度(间接讽刺Ruby的“速率”)
作者:
trentswd
时间:
2009-3-15 23:30
Qbasic是萌物……
居然现在还能看见qb的代码,泪流满面(虽然我把那个大都忘了……)
……其实我觉得那些写文件大概都比算圆周率本身耗时间……
作者:
是将赴各
时间:
2009-3-16 00:33
提示:
作者被禁止或删除 内容自动屏蔽
作者:
hitlerson
时间:
2009-3-19 18:23
我还是直接调用 Math::PI 吧
作者:
雷欧纳德
时间:
2009-3-19 19:50
Math库里有个进度极高的pi{/fd}不需要自己算
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1