中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理处理浮点运算]
« [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] »
作者:
标题: [共同参与][挑战思路][批处理处理浮点运算] 上一主题 | 下一主题
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 76 楼』:  

CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,但是也有取余的计算,
set/a a=97%7
6
就是取余计算



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-14 08:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 77 楼』:  

其实对于批处理做除法运算, 我也有一个思路, 只是比较恐惧, 不敢写.

1.  写出来代码会非常复杂.
2.  执行效率会很低. 初步测算一下, 如果除数是几位数, 被除数是二十位. 执行时间很可能会达到几十秒甚至更多.

不知哪位高手出来挑战一下除法运算, 要求像前面的加, 减, 乘运算一样, 可以处理浮点数, 位数不受限制. 我们拭目以待!!!

2006-10-14 09:05
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 78 楼』:  

不要认为不可能, 没有什么不可能的, 在我眼里就没有这个词.

用批处理实现无限制除法运算是完全可行的~~~!

2006-10-14 09:13
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 79 楼』:  



  Quote:
Originally posted by qwe1234567 at 2006-10-14 08:54:
CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,但是也有取余的计算,
set/a a=97%7
6
就是取余计算

  虽然有模运算,并且可以把结果表示成 商……余数 的格式,但那只是针对整数而言。如果按照浮点数加法运算的模式,按位来做除法,那小数除法的算法又该如何写呢?即使算法能写出来,恐怕也是相当复杂而效率又比较低下的吧?



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-14 09:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 80 楼』:  

象打算盘一样计算就是了



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-14 09:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 81 楼』:  

代码更新在86楼,欢迎继续测试

[ Last edited by he200377 on 2006-10-17 at 01:00 ]

2006-10-16 00:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 82 楼』:  

错误还挺多的,3.2/0.32 和0.32/0.032无法算!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-16 01:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 83 楼』:  



  Quote:
Originally posted by qwe1234567 at 2006-10-16 01:05:
错误还挺多的,3.2/0.32 和0.32/0.032无法算!

我想个解决根本的方法,呵呵,算之前把小数的位数搞一样,呵呵,问题就好解决多了

[ Last edited by he200377 on 2006-10-16 at 02:11 ]

2006-10-16 02:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 84 楼』:  

那就好!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-16 06:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 85 楼』:  



  Quote:
Originally posted by he200377 at 2006-10-16 02:10:

我想个解决根本的方法,呵呵,算之前把小数的位数搞一样,呵呵,问题就好解决多了

[ Last edited by he200377 on 2006-10-16 at 02:11 ]

he200377兄81楼的代码一定花了不少心思, 呵呵~ 不错.

但在运算浮点数时有很大的局限性, 这里提几点不成熟的建议, 也不知分析得是否正确:

1.  生成ver_.txt临时文件, 这个只要把变量用好一点, 完全不用产生临时文件.

2.  看了去零的那段子函数, 你用了二十行, 其实几行就可以解决了.

3.  最大的缺陷就是你说的9.99/9, 看了你的代码, 在这点上考虑得不全面. 出错主要在去掉除数与被除数时的小数点进位. 在最后小数点进位时, 无论%x_wei%是什么值你都采取0.xxx这样的方式进位. 整数本来为正数, 小数点进位时整数位就成了小数.
这里你说的把小数位先对齐再计算也是一个好主意, 但原本就只可以运算9位以内的数, 这样运算范围会变得更小. 不是一个好的解决方案.
建议你在最后把运算结果的小数点位置读取出来, 再根据%x_wei%来进位. 如果位数不足再补零.

4.  qwe1234567版主说的3.2/0.32 和0.32/0.032无法算!当除数的整数为零时出错很严重, 在最后处理小数点时出现了死循环.

5.  0.123/123=0.002609756097 这里在读取被除数时产生了错误, 字符被倒置.

这个算法还不成熟, 而且有局限性, 最重要是不能突破位数的限制.

但处理整数时却可以提高精度.

兄弟还得继续努力, 要想突破位数限制这个算法是无法实现的.

[ Last edited by pengfei on 2006-10-16 at 08:20 ]

2006-10-16 08:11
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 86 楼』:  

更新在91楼

[ Last edited by he200377 on 2006-10-18 at 05:54 ]

2006-10-17 01:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 87 楼』:  

呵呵,其实做运算,我认为把 cmd 能做的事情交给它做还是能很大的提高效率的,呵呵

2006-10-17 01:01
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 88 楼』:  

回pengfei兄:

1.  生成ver_.txt临时文件, 这个只要把变量用好一点, 完全不用产生临时文件.
这点我也考虑过,我之所以没有那样做,是考虑到了通用性,你没有发现每个call 都可以完全移植吗?呵呵

2.  看了去零的那段子函数, 你用了二十行, 其实几行就可以解决了.
呵呵~我是这样想的,把几行的放出来show ,哈哈~共同学习吗

[ Last edited by he200377 on 2006-10-17 at 01:06 ]

2006-10-17 01:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 89 楼』:  

还要改进,请看结果:
运算结果:
1321.1321/.132=86348.503267973
91.3/0.91=480.526315789
0.965/9.6=0.05927083333
0.0986/9.86=0.006987829614



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-17 02:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 90 楼』:  



  Quote:
Originally posted by he200377 at 2006-10-17 01:05:
回pengfei兄:

1.  生成ver_.txt临时文件, 这个只要把变量用好一点, 完全不用产生临时文件.
这点我也考虑过,我之所以没有那样做,是考虑到了通用性 ...

关于生成临时文件和去零, 你可以参考前面的脚本, 这样的代码都有.

2006-10-17 03:08
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: