中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-15 13:14
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理处理浮点运算]
可打印版本  45,412 / 136
第76楼 不得不爱 发表于 2006-10-14 08:54
超级版主 发帖 2,044 积分 5,310 来自 四川南充
CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,但是也有取余的计算,
set/a a=97%7
6
就是取余计算
第77楼 pengfei 发表于 2006-10-14 09:05
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
其实对于批处理做除法运算, 我也有一个思路, 只是比较恐惧, 不敢写.

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

不知哪位高手出来挑战一下除法运算, 要求像前面的加, 减, 乘运算一样, 可以处理浮点数, 位数不受限制. 我们拭目以待!!!
第78楼 pengfei 发表于 2006-10-14 09:13
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
不要认为不可能, 没有什么不可能的, 在我眼里就没有这个词.

用批处理实现无限制除法运算是完全可行的~~~!
第79楼 namejm 发表于 2006-10-14 09:15
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by qwe1234567 at 2006-10-14 08:54:
CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,但是也有取余的计算,
set/a a=97%7
6
就是取余计算

  虽然有模运算,并且可以把结果表示成 商……余数 的格式,但那只是针对整数而言。如果按照浮点数加法运算的模式,按位来做除法,那小数除法的算法又该如何写呢?即使算法能写出来,恐怕也是相当复杂而效率又比较低下的吧?
第80楼 不得不爱 发表于 2006-10-14 09:41
超级版主 发帖 2,044 积分 5,310 来自 四川南充
象打算盘一样计算就是了
第81楼 vkill 发表于 2006-10-16 00:31
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
代码更新在86楼,欢迎继续测试

[ Last edited by he200377 on 2006-10-17 at 01:00 ]
第82楼 不得不爱 发表于 2006-10-16 01:05
超级版主 发帖 2,044 积分 5,310 来自 四川南充
错误还挺多的,3.2/0.32 和0.32/0.032无法算!
第83楼 vkill 发表于 2006-10-16 02:10
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
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 ]
第84楼 不得不爱 发表于 2006-10-16 06:24
超级版主 发帖 2,044 积分 5,310 来自 四川南充
那就好!
第85楼 pengfei 发表于 2006-10-16 08:11
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
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 ]
第86楼 vkill 发表于 2006-10-17 01:00
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
更新在91楼

[ Last edited by he200377 on 2006-10-18 at 05:54 ]
第87楼 vkill 发表于 2006-10-17 01:01
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
呵呵,其实做运算,我认为把 cmd 能做的事情交给它做还是能很大的提高效率的,呵呵
第88楼 vkill 发表于 2006-10-17 01:05
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
回pengfei兄:

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

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

[ Last edited by he200377 on 2006-10-17 at 01:06 ]
第89楼 不得不爱 发表于 2006-10-17 02:38
超级版主 发帖 2,044 积分 5,310 来自 四川南充
还要改进,请看结果:
运算结果:
1321.1321/.132=86348.503267973
91.3/0.91=480.526315789
0.965/9.6=0.05927083333
0.0986/9.86=0.006987829614
第90楼 pengfei 发表于 2006-10-17 03:08
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
Originally posted by he200377 at 2006-10-17 01:05:
回pengfei兄:

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


关于生成临时文件和去零, 你可以参考前面的脚本, 这样的代码都有.
上一页  13 4 5 6 7 8 910  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023