如何检测接近值的数字?我有以下代码,但我想缩短它。
SET /A "AI_1=%AI%-2"
SET /A "AI_2=%AI%-1"
SET /A "AI_1h=%AI%+1"
SET /A "AI_2h=%AI%+2"
IF %Speed% EQU %AI_2% GOTO :ACCELERATE
IF %Speed% EQU %AI_1% GOTO :ACCELERATE
IF %Speed% EQU %AI% GOTO :ACCELERATE
IF %Speed% EQU %AI_1H% GOTO :ACCELERATE
IF %Speed% EQU %AI_2H% GOTO :ACCELERATE
发布于 2017-02-20 10:40:26
也许有点神秘,但这缩短了代码。
2>nul set /a "1/((speed-ai-1)*(speed-ai)*(speed-ai+1))" || goto :ACCELERATE
它只是试图计算一个除法。如果speed
值在[AI-1 .. AI+1]
范围内,除数中的至少一个元素将是0
,那么乘法将是0
,除法将失败,除法为零错误。条件运算符||
(如果上一个命令失败,则运行next命令)将处理这种情况。
如果speed
和ai
的值很高(批处理算法只处理整数有符号的32位值),则应将操作分为三个不同的除法,以避免乘法中的溢出。
2>nul set /a "1/(speed-ai-1), 1/(speed-ai), 1/(speed-ai+1)" || goto :ACCELERATE
发布于 2017-02-20 10:05:05
EQU : Equal
NEQ : Not equal
LSS : Less than <
LEQ : Less than or Equal <=
GTR : Greater than >
GEQ : Greater than or equal >=
我会结合LEQ和GEQ来推迟,如果你有一个接近你目前的数字。
发布于 2017-02-20 10:37:29
这个for
循环通过AI-3
循环到AI+3
,并对它们之间的每个整数进行if
比较。
SET /A "AI_3Lower=%AI%-3"
SET /A "AI_3Higher=%AI%+3"
for /l %%G in (%AI_3Lower,1,%AI_3Higher) do (
if %Speed% EQU %%G goto :accelerate
)
https://stackoverflow.com/questions/42341475
复制相似问题