Алгоритм вычисления квадратного корня

Pixilang по русски
Post Reply
intre
Posts: 43
Joined: Sat Nov 08, 2008 6:28 pm
Location: Moscow
Contact:

Алгоритм вычисления квадратного корня

Post by intre »

Code: Select all

sqrt:
	rslt = L
	div = L 
	if L <= 0 { ret }
	while (1){
		div = (L / div + div) / 2
		if rslt > div { rslt = div }
		else { ret }
	}
ret
Нужное число заносим в переменную L, результат берем из rslt. Например:

Code: Select all

L = 121
sqrt
print("$rslt", 0, 0, BLACK)
- выведет 11.
intre
Posts: 43
Joined: Sat Nov 08, 2008 6:28 pm
Location: Moscow
Contact:

Re: Алгоритм вычисления квадратного корня

Post by intre »

Эффект создан с использованием алгоритма:

Code: Select all

SCREEN_WIDTH = 240
SCREEN_HEIGHT = 320
resize_pixi(0, SCREEN_WIDTH, SCREEN_HEIGHT)

img = new_pixi(SCREEN_WIDTH, SCREEN_HEIGHT, 1)
L = (SCREEN_WIDTH/2)*(SCREEN_WIDTH/2) + (SCREEN_HEIGHT/2)*(SCREEN_HEIGHT/2)
sqrt
max = rslt

COLOR1 = RED
COLOR2 = YELLOW

i = 0
while(1){
	clear(SNEG)
	
	COLOR = get_blend(COLOR1, COLOR2, ccos(i)+128)
	x = 0
	while(x < SCREEN_WIDTH){
		y = 0
		while(y < SCREEN_HEIGHT){
			L = (x-SCREEN_WIDTH/2)*(x-SCREEN_WIDTH/2) + (y-SCREEN_HEIGHT/2)*(y-SCREEN_HEIGHT/2)
			sqrt
			img[y*SCREEN_WIDTH+x] = rslt*COLOR/max
			y+1
		}
		x+1
	}
	pixi(img, 0, 0)
	
	i+1
	frame(50)
}

sqrt:
	rslt = L
	div = L 
	if L <= 0 { ret }
	while (1){
		div = (L / div + div) / 2
		if rslt > div { rslt = div }
		else { ret }
	}
ret
Post Reply