中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 14:08
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » [原创]实数加减运算脚本!
可打印版本  6,535 / 23
第1楼 pengfei 发表于 2006-10-06 23:42
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
[原创]实数加减运算脚本!
实数加减运算脚本已更新, 功能更加强大.
1. 可以进行多种加减法运算, 如:(X+Y, X-Y, -X+Y, -X-Y).
2. 加入了错误输入的检测.
3. 运算数不受位数限制, 理论上可以运算N位的范围.
可以替代计算器进行加减法运算. 却不用受位数的限制. 这是该脚本最大的优势.

由于时间关系没有进行全面测试, 不足的地方请指正, 大家一起探讨, 研究~~~!




今天中秋节, 祝联盟所有朋友中秋快乐, 学习进步, 天天开心~~~! 送大家一个礼物"浮点数加减运算脚本".

代码刚写出来, 还有很多不足的地方, 大家一起探讨!

先前的代码有一个致使的缺陷, 现已修正. 请测试...



相关讨论:

[共同参与][挑战思路][批处理处理浮点运算]

关于数值时的进制问题!

[ Last edited by namejm on 2006-10-19 at 00:39 ]

附件
浮点数加减运算脚本.rar (1.49 KiB)
无限制实数加减运算脚本.rar (2.21 KiB)
第2楼 bg 发表于 2006-10-07 01:51
初级用户 发帖 34 积分 118
收藏看看
第3楼 不得不爱 发表于 2006-10-07 03:40
超级版主 发帖 2,044 积分 5,310 来自 四川南充
应该可以计算到小数点后面9位啊

[ Last edited by qwe1234567 on 2006-10-7 at 03:48 ]
第4楼 pengfei 发表于 2006-10-07 04:25
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
不行, 9位会溢出...



[ Last edited by pengfei on 2006-10-7 at 06:17 ]
第5楼 pengfei 发表于 2006-10-07 06:25
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
发现一个怪现象...

第6楼 不得不爱 发表于 2006-10-07 06:37
超级版主 发帖 2,044 积分 5,310 来自 四川南充
1:我那个代码却可以算小数位后9位,应该是方法的问题,我的是小数点后首位见0才在首位加1,而你的是所有小数位的首位都加1,所以你的代码小数位要少1位!
2:浮点数的减法运算有点问题: 看下下面的错误:
5.69-65.654=-59.6371
53.698-654.95=-600.16585
第7楼 pengfei 发表于 2006-10-07 07:04
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
原来是执行顺序出错了, 代码已修正.

5.69-65.654=-59.964
53.698-654.95=-601.252

版主的代码为分析是零就添1, 当时我也想采用这种方法, 但稍微麻烦一点. 也就没有使用此方案.

而那种方案当小数位第一位为零时照样只能运算8位小数, 并不是都能运算9位小数. 所以我觉得无论是零与否都添1简单一点, 后面也要少用一个判断. 说明也要少一些文字^_^

[ Last edited by pengfei on 2006-10-7 at 07:10 ]
第8楼 不得不爱 发表于 2006-10-07 08:11
超级版主 发帖 2,044 积分 5,310 来自 四川南充
那种方案当小数位第一位为零时照样能运算9位小数
第9楼 pengfei 发表于 2006-10-07 08:18
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
发现的确是这样的, 而我的代码小数第一位为零可以运算9位数, 不为零则只可以运算8位数.
第10楼 electronixtar 发表于 2006-10-08 05:25
铂金会员 发帖 2,672 积分 7,493
建议pengfei写一个bat的 math library,然后以后大家bat变成就直接include了,^_^
第11楼 不得不爱 发表于 2006-10-08 05:57
超级版主 发帖 2,044 积分 5,310 来自 四川南充
Originally posted by pengfei at 2006-10-7 06:25:
发现一个怪现象...

第12楼 pengfei 发表于 2006-10-12 08:17
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
看来是跟CMD的数据类型有直接关系, set /a运算时的数据存储类型应该是长整型. 而22...+11...超过了他的最大存储空间, 就会溢出, 所进的位把符号位填满了. 于是出现负数.

而22..-11...却没达到最大存储容量. 因此执行正常.

[ Last edited by pengfei on 2006-10-12 at 08:28 ]
第13楼 pengfei 发表于 2006-10-12 08:27
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
实数运算脚本已更新在一楼第1段, 功能更加强大, 无任何限制实现各种加减运算!

欢迎大家测试...
第14楼 不得不爱 发表于 2006-10-12 21:27
超级版主 发帖 2,044 积分 5,310 来自 四川南充
我也来1个!


[ Last edited by qwe1234567 on 2006-10-13 at 01:11 ]

附件
实数加减运算脚本.rar (1.17 KiB)
第15楼 pengfei 发表于 2006-10-12 23:01
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
请输入第一个小数:1111111111.1111111111
请输入第二个小数:-1111111111.1111111112
计算结果是:
1111111111.1111111111-1111111111.1111111112=9999999999.9999999999

看了一下, qwe1234567版主的代码写得还是不错. 你在进行各种加减法运算时走了捷径, 走的这个捷径却会出现致命错误. 另外在格式输出上控制得不太严格.

我的代码使用更多的可调用函数来实现各种加减法运算, 完全模拟了真实的人工计算.

[ Last edited by pengfei on 2006-10-12 at 23:10 ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023