DarwinBotsManual
Abrir la app EnglishEN

sqr

Cambia el número de arriba de la pila por su raíz cuadrada redondeada; si no es positivo, da 0.

Datos

Palabra
sqr
Familia
Avanzados
Pila entera
saca 1, pone 1
Qué hace
Cambia el tope por su raíz cuadrada, redondeada al entero más cercano. Si no es positivo, da 0.
Costo
Comando avanzado; debugint y debugbool no cuestan
Se ejecuta en
dentro de un gen: en la condición (cond) y en el cuerpo (start o else)

x sqr deja la raíz cuadrada de x, redondeada al entero más cercano: 100 sqr da 10, 10 sqr da 3 y 2 sqr da 1. Ojo, que el nombre engaña: no eleva al cuadrado (para eso, x dup mult o x 2 pow).

Con un número negativo, o con 0, da 0. Eso, que parece un detalle, lo aprovechan varios bots del Bestiario: x sqr dup div vale 1 si x es positivo y 0 si no, porque div por cero da 0. Pacifist v0.01 lo usa para cargar veneno solo cuando tiene más de 100 de energía:

cond
start
  ' la dirección queda en 824 si *.nrg − 100 es positivo, y en 0 si no
  40 .strvenom *.nrg 100 sub sqr dup div mult store
stop

Fijate en qué se multiplica: no el 40, sino la dirección de .strvenom, que queda en 824 o en 0. Y un store a la dirección 0 no hace nada (ver Números y direcciones), así que el 40 solo se escribe con energía de sobra.

Para la longitud de un vector, que es la raíz de una suma de cuadrados, está pyth; para otras raíces, root.