1 (изменено: torus, 2016-05-20 14:15:54)

Тема: CMD/BAT: 24-битная синусоида

Код :

@echo off
setlocal enabledelayedexpansion
if %1 gtr 26353589 (
	Echo Больше чем 2**23*pi
	exit /b
)
set /a "a=5"
set n=%1
	set /a "series=(a * 2) + 1"
	set q=!n!
	for /l %%i in (3,2,!series!) do (
		set /a "plusminus=(%%i / 2) %% 2"
		if !plusminus!==1 (set pms=-) else (set pms=+)
		set x=!q!
		set b=!q!
		set xe=0
		for /l %%a in (2,1,%%i) do (
			set /a "x=((x >> 12)*(b >> 12))+(((x & 0xFFF)*(b >> 12)) >> 12)+(((x >> 12)*(b & 0xFFF)) >> 12)"
			if !x! geq 16777216 (
				set /a "x=x >> 1","xe+=1"
			)
		)
		for /l %%a in (1,1,%%i) do (
			for /l %%i in (1,1,2) do (
				if !x! lss 16777216 if !xe! gtr 0 (
					set /a "x=x << 1","xe-=1"
				)
			)
			set /a "x=(x<<2) / %%a","xe-=2"
			for /l %%i in (1,1,2) do (
				if !xe! lss 0 (
					set /a "x=x >> 1","xe+=1"
				)
			)
		)
		set /a "n=n !pms! x"
	)
Echo !n!
endlocal
exit /b