divstore
Divide lo que hay en una celda por un número, redondeando al entero más cercano; dividir por 0 deja la celda en 0.
Datos
- Palabra
divstore- Familia
- Escritura en memoria
- Pila entera
- saca 2, pone 0
- Qué hace
- Saca una dirección y un valor, y divide la celda por el valor, redondeando al entero más cercano (en el empate, al par). Dividir por 0 la deja en 0. Con la dirección 0 el valor se pierde.
- Costo
- Store dividido por el divisor de cada uno, solo si escribe
- División del costo
- ÷ 5
- Se ejecuta en
- en el cuerpo de un gen (start o else) y solo si el tope de la pila booleana es verdadero o está vacía
- Marca lazos
- sí
v d divstore deja en la celda d lo que tenía dividido por v. Da lo mismo que *d v div d store, con menos palabras y a la quinta parte del costo de un store.
| Palabra | Pila después |
|---|---|
2 | 2 |
50 | 2 50 |
divstore | (vacía); la celda 50 vale la mitad |
La división redondea al entero más cercano, no trunca, y en el empate exacto va al par. Se ve bien partiendo a la mitad una y otra vez:
' parte la celda 50 a la mitad en cada ciclo
cond
*.robage 0 =
start
100 50 store
stop
start
2 50 divstore
stopLa celda pasa por 50, 25, 12, 6, 3, 2, 1 y 0. Fijate en los empates: 12,5 da 12, 1,5 da 2 y 0,5 da 0.
Dos trampas:
- Dividir por 0 no deja la celda como estaba: la pone en 0. Si el divisor sale de una lectura que puede valer 0, protegelo con una condición.
- Con la dirección 0, a diferencia de
store, el valor sí se saca de la pila y se pierde.
Como store, le avisa al sistema de lazos si escribís en .tieang1 o .tielen1. La división de la pila, sin guardar, es div.