![]() |
中国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: 虽然有模运算,并且可以把结果表示成 商……余数 的格式,但那只是针对整数而言。如果按照浮点数加法运算的模式,按位来做除法,那小数除法的算法又该如何写呢?即使算法能写出来,恐怕也是相当复杂而效率又比较低下的吧? |
|
| 第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: 我想个解决根本的方法,呵呵,算之前把小数的位数搞一样,呵呵,问题就好解决多了 [ 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: 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: 关于生成临时文件和去零, 你可以参考前面的脚本, 这样的代码都有. |
|
| 上一页 1 … 3 4 5 6 7 8 9 … 10 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |