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
stopFijate 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.