我贴一个较高效的浮点加法函数- @echo off
-
- set aa=%time%
- for /l %%a in (1,1,1000) do call :_ADD 123456722222222222222890.3212222222222222222222222 1222222222222222222.789233333333333333333333333
-
- set/p =计算1000次,用时:<NUL&CALL
-
- goto :eof
- ::前面为演示用
-
- :::::::::::::::::::::::::::::::::::::
- ::浮点加法 call _ADD <被加数> <加数> [返回变量]
- :_ADD [var] //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 [return] // 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
复制代码
[ 本帖最后由 netbenton 于 2009-10-10 07:58 编辑 ] |