批处理浮点加法函数,再次精简提速了!
@echo off
set aa=%time%
for /l %%a in (1,1,1000) do call :_ADD 123456722222222222222890.3212222222222222222222222 1222222222222222222.789233333333333333333333333
set/p =计算1000次,用时:<nul&call :etime %aa% %time%
goto :eof
::前面为演示用
:::::::::::::::::::::::::::::::::::::
::浮点加法 call _ADD <被加数> <加数>
:_ADD <num><num> //made by netbenton on 2009.10.09
::
::分别支持十进制的64位整数和小数,一次计算小于0.01秒
:::::::::::::::::::::::::::::::::::::
(setlocal enabledelayedexpansion
set L=&for /l %%a in (1,1,8) do set L=!L!00000000
for /f "tokens=1-3 delims=." %%a in ("!L!%1.!L!") do set at=%%a&set aw=%%b%%c
for /f "tokens=1-3 delims=." %%a in ("!L!%2.!L!") do set bt=%%a&set bw=%%b%%c
set a=!at:~-64!!aw:~,64!
set b=!bt:~-64!!bw:~,64!
set e=
set v=200000000
for /l %%a in (8,8,128)do set/a v=1!b:~-%%a,8!+1!a:~-%%a,8!+!v:~-9,-8!-2&set e=!v:~-8!!e!
set e=!e:0= !
for /f "tokens=*" %%a in ("!e:~,-64!.!e:~64!") do set e=%%~nxa
for %%a in ("!e: =0!") do endlocal&(if %3.==. (echo %%~a) else set %3=%%~a)
exit/b)
::计算时差函数
:etime <begin_time> <end_time> // By plp626 On 09-7-20
setlocal enabledelayedexpansion&set be=%~1;%~2&set be=!be::=;1!&set n=
for %%a in (%be:.=%)do set/a n+=1&set t!n!=%%a
set/a n=((t4-t1)*60+t5-t2)*6000+t6-t3,s=n/100,w=n%%100/10,f=n%%100%%10
endlocal&(if %3.==. (echo %s%.%w%%f%) else set %3=%n:-=%)&exit/b
Last edited by netbenton on 2009-10-10 at 06:04 ]