中国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
来自 四川南充
状态 离线
『第 61 楼』:  

原来是一次算9位引起的,已经修改位一次算1位,请检查!
47楼的代码计算结果是:
0.9999999999999999999999999999999999999999999999999999999999999 +0.7777777777777
7 =1.17777777777777699999999999999999999999999999999999999999999999



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




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

关于qwe1234567版主提出的几点问题, 都属于错误输入的范筹, 而脚本的运算是绝对没有任何问题的...

由于时间的关系对错误输入的检测稍候再改进~~~!

2006-10-11 08:24
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


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

0.9999999999999999999999999999999999999999999999999999999999999 和0.77777777777777那个是错误输入的?



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

我爱DOS


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

0.9+0.7=1.16
0.99+0.77=1.176
0.99+0.7=1.169
0.999 +0.77 =1.1769这是不是错误输入?

[ Last edited by qwe1234567 on 2006-10-11 at 09:03 ]



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




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

sorry 我指的是输入两个小数点的情况.

由于时间关系没来得及测试, 你说的问题已经解决, 代码更新在47楼...

2006-10-11 09:13
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


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

看了下,你的代码有3.53K压缩后有1.23K我的代码有2.11K压缩后有834bytes



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




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

嗯,你代码中的变量名都用简单的j0, jq1等, 并且复合语句都写在一行.

而我写的变量名都用一些英文单词, 并且所有的复合语句每一句命令都另起一行再在前面空两格(已经习惯了, 代码更好看些). 不太喜欢用管道命令把命令拼接起来.  这样产生大量的空格, 英语单词虽然使用得不好, 但也是为了见名知意.

[ Last edited by pengfei on 2006-10-11 at 09:57 ]

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




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

功能更加强大的加减法运算脚本已经完成, 请测试...

http://www.cn-dos.net/forum/viewthread.php?tid=23611&fpage=1

   此帖被 +6 点积分          点击查看详情   


2006-10-12 08:30
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


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

我也来一段,特点是体积小,计算快,可以计算任意位小数! 请测试...
http://www.cn-dos.net/forum/viewthread.php?tid=23611



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





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

昨天想了一个晚上想到的也就是补位等,下回去代码好好看看

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





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 71 楼』:  

如果使用中国珠算的进位原理,估计算乘、除的任意位数都没有问题了~:)

   此帖被 +2 点积分    点击查看详情   
评分人:【 jvive 分数: +2  时间:2008-4-3 11:29




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-13 02:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

  因为CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,并且不能处理小数除法,所以,用CMD来做除法运算应该慎之又慎。

  按位做乘法运算的方法是行得通的,实际上加法运算就已经包含了乘法运算的部分功能,各位有兴趣的话,可以在加法代码的基础上扩充一下。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-13 06:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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



  Quote:
Originally posted by namejm at 2006-10-13 06:49:
  因为CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,并且不能处理小数除法,所以,用CMD来做除法运算应该慎之叠...

原理上是可以行的通的,这几天家停电,等几天发个1000个以内数的加和10个数以内的乘,呵呵,基本的东西已经构思好了

2006-10-13 08:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




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

实现乘法运算完全可行, 前几天我已经完成了最简单的乘法运算脚本, 但如果运算位数大时就代码就比较复杂了.

由于其他的的原因一直没有进一步修改, 有时间一定好好写一段...

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




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

昨天晚上加班改进了乘法运算脚本, 可以运算整数和浮点数, 通用各种情况. 因为牵涉到大量的取位运算, 所以效率不是很高, 有时间再好好优化一下.

欢迎大家测试...
@echo off
if not %1*==* set M=%1 & set N=%2 & goto jmp
:input
cls
set M=
set N=
set /p M=   input primary number [X]:
set /p N=input number two number [Y]:
:jmp
set sign=
if "%M:~0,1%"=="-" (
    if "%N:~0,1%"=="-" (
        set M=%M:~1%
        set N=%N:~1%
        goto begin
    )
)
if "%M:~0,1%"=="-" (
    set M=%M:~1%
    set sign=-
    goto begin
)
if "%N:~0,1%"=="-" (
    set N=%N:~1%
    set sign=-
)
:begin
echo %M% | find "." >nul || set M=%M%.0
echo %N% | find "." >nul || set N=%N%.0
if "%M:~-1%"=="." set M=%M%0
if "%N:~-1%"=="." set N=%N%0
if "%M:~0,1%"=="." set M=0%M%
if "%N:~0,1%"=="." set N=0%N%
call :jerque "%M%"
call :jerque "%N%"
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=." %%i in ("%M%") do (
    set X=%%i
    set X_=%%j
)
for /f "tokens=1,2 delims=." %%i in ("%N%") do (
    set Y=%%i
    set Y_=%%j
)
call :front %X%
set X=%front_%
call :front %Y%
set Y=%front_%
call :rear %X_%
set X_=%rear_%
call :rear %Y_%
set Y_=%rear_%
call :count %X_%
set jlxs=%count_%
call :count %Y_%
set /a jlxs=%count_%+%jlxs%
set son=@%Y%%Y_%
set result=0
set append=
:boss
if not "%son:~-1%"=="@" (
    set xx=!son:~-1!
    set son=!son:~0,-1!
    call :under
    call :plus
    set result=!ll!
    set append=0!append!
    goto boss
)
if "%jlxs%"=="0" goto end
set result=!result:~0,-%jlxs%!.!result:~-%jlxs%!
call :rear %result%
set result=%rear_%
if "%result:~-1%"=="." set result=%result:~0,-1%
if "%result:~0,1%"=="." set result=0%result%
:end
cls
echo ============
echo 运算结果^^^!
echo ============
echo.
echo.
echo %M%*%N%=%sign%%result%
pause >nul
exit

:plus
set weave=%single:~0,-1%%weave:~0,-1%
call :count %weave%%append%
set num1=%count_%
call :count %result%
set num2=%count_%
set /a num=%num1%-%num2%
call :join %num% %result%
set result=%join_%
set lx=@%weave%%append%
set ly=@%result%
set ln=0
set ll=
:plus_
set /a lz=%lx:~-1%+%ly:~-1%+%ln%
set/a ln=0%lz:~0,-1%
set ll=%lz:~-1%%ll%
set lx=%lx:~0,-1%
set ly=%ly:~0,-1%
if "%lx%"=="@" (
    if "%ln%"=="1" (
        set ll=1%ll%
        goto :eof
    ) else (
        goto :eof
    )
)
goto plus_
:under
set father=@%X%%X_%
set single=0
set weave=
:under_
set note=%single:~0,-1%
if "%note%"=="" set note=0
set weave=%single:~-1%%weave%
if not "%father:~-1%"=="@" (
    set yy=!father:~-1!
    set /a yy=!yy!
    set father=!father:~0,-1!
    call :op
)
goto :eof
:op
set part=!xx!
set part_=!yy!
set /a single=%part%*%part_%+!note!
goto under_
:front
set front_=%1
:front1
if "%front_:~0,1%"=="0" (
    set front_=%front_:~1%
    goto front1
)
goto :eof
:rear
set rear_=%1
:rear1
if "!rear_:~-1!"=="0" (
    set rear_=!rear_:~0,-1!
    goto rear1
)
goto :eof
:count
set count2=%1@
set count_=0
:count1
if not "!count2:~0,1!"=="@" (
    set /a count_+=1
    set count2=!count2:~1!
    goto count1
)
goto :eof
:join
set margin=%1
set join_=%2
:join1
if not "%margin%"=="0" (
    set /a margin-=1
    set join_=0!join_!
    goto join1
)
goto :eof
:jerque
for /f "tokens=1* delims=." %%i in (%1) do (
    echo %%i%%j|findstr "^[0-9]*$">nul || goto error
)
goto :eof
:error
cls
echo ======================
echo 运算数不符合要求^^!
echo ======================
echo.
echo.
echo 请按任意键重新输入...
pause >nul
goto input
[ Last edited by pengfei on 2006-10-15 at 09:35 ]

附件 1: 无限制乘法运算脚本.rar (2006-10-14 09:00, 1.25 K, 下载附件所需积分 1 点 ,下载次数: 20)
2006-10-13 23:38
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: