Jump to content
  • 0
ema

Divisione: Come Fare?

Question

qualcuno sa come creare un' aggeggio che divide due numeri binari? non riesco proprio a farmi venire in mente come fare e sul web non sono riuscito a trovare molto... basta anche che descriviate semplicemente l'algoritmo che si usa e dovrei essere in grado si trasporlo su minecraft... inoltre se c'è qualcuno a cui venga in mente come eseguire una divisione utilizzando solo l'addizione (ed eventualmente la moltiplicazione) dica pure, sarà sicuramente d'aiuto. grazie in anticipo :D

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

qualcuno sa come creare un' aggeggio che divide due numeri binari? non riesco proprio a farmi venire in mente come fare e sul web non sono riuscito a trovare molto... basta anche che descriviate semplicemente l'algoritmo che si usa e dovrei essere in grado si trasporlo su minecraft... inoltre se c'è qualcuno a cui venga in mente come eseguire una divisione utilizzando solo l'addizione (ed eventualmente la moltiplicazione) dica pure, sarà sicuramente d'aiuto. grazie in anticipo :D

è abbastanza difficile.

Intanto il più esperto in redstone è Ian O eBloox.

Share this post


Link to post
Share on other sites
  • 0

Onestamente, non mi è mai venuto in mente nient'altro che un utilizzo contorto di qualche shift register...

Ciao

Ian

Share this post


Link to post
Share on other sites
  • 0

Onestamente, non mi è mai venuto in mente nient'altro che un utilizzo contorto di qualche shift register...

Ciao

Ian

se ti va ed è fattibile dimmi pure...

Share this post


Link to post
Share on other sites
  • 0

se ti va ed è fattibile dimmi pure...

Penso sia fattibile (sono troppo pigro per metterlo in pratica XD), ma lento come una merda (se non usi RP).

In pratica, ti servono 3 shift register (che chiameremo D, C ed R), un sottrattore e un "comparatore" (un circuito che controlla se un numero è maggiore di un altro). R dev'essere a input seriale e output parallelo, D dev'essere a input parallelo e output seriale, mentre dev'essere possibile inserire un input sia parallelo che seriale in C (il cui output è parallelo). L'output di D dev'essere collegato all'input seriale di C.

1) Si inserisce il dividendo in D.

2) Left shift di D, che quindi immetterà il suo MSB in C, e di C.

3) Controllare se C è maggiore del dividendo (che chiamerò G). Se lo è, inserire un 1 in R, eseguire C-G e inserire il risultato di quest'operazione in C. Se non lo è, inserire uno 0 in R.

4) Se D è vuoto (tutti i bit sono 0), concludere l'operazione restituendo R come quoziente e C come resto. Se D non è vuoto, ripetere dal passaggio 2.

Penso che funzioni, ma divertiti con tutti quei D Flip-flop XD

Ciao

Ian

  • Like 1

Share this post


Link to post
Share on other sites
  • 0

Penso sia fattibile (sono troppo pigro per metterlo in pratica XD), ma lento come una merda (se non usi RP).

In pratica, ti servono 3 shift register (che chiameremo D, C ed R), un sottrattore e un "comparatore" (un circuito che controlla se un numero è maggiore di un altro). R dev'essere a input seriale e output parallelo, D dev'essere a input parallelo e output seriale, mentre dev'essere possibile inserire un input sia parallelo che seriale in C (il cui output è parallelo). L'output di D dev'essere collegato all'input seriale di C.

1) Si inserisce il dividendo in D.

2) Left shift di D, che quindi immetterà il suo MSB in C, e di C.

3) Controllare se C è maggiore del dividendo (che chiamerò G). Se lo è, inserire un 1 in R, eseguire C-G e inserire il risultato di quest'operazione in C. Se non lo è, inserire uno 0 in R.

4) Se D è vuoto (tutti i bit sono 0), concludere l'operazione restituendo R come quoziente e C come resto. Se D non è vuoto, ripetere dal passaggio 2.

Penso che funzioni, ma divertiti con tutti quei D Flip-flop XD

Ciao

Ian

Io l'ho costruito, il procedimento è più o meno simile, ma c'è un solo flip flop in ingresso, e uno shift register per il risultato.

Funziona abbastanza bene, però il processo è un pò lunghino, ogni "ciclo" dura circa 7 secondi, e la macchina ha tanti cicli quanto vuoi che sia preciso il risultato. Ad esempio il mio, ha imputi da 10 bit, e un risultato da 20 bit, 10 cifre decimali. Da un risultato molto preciso, (alla 3° cifra decimale dopo la virgola) però implica 20 cicli, quindi più di due minuti di calcolo.

Ho provato a costruirne uno differente, senza clock, e senza processo di calcolo, unendo tutte le diverse "capsule di base" (comparatore, sottrattore) in serie. Con questo basta immettere l'imput e automaticamente uscirà l'output, però viene qualcosa di enorme. E il lag fa durare il processo parecchio di più dell'altra versione.

  • Like 2

Share this post


Link to post
Share on other sites
  • 0

Penso sia fattibile (sono troppo pigro per metterlo in pratica XD), ma lento come una merda (se non usi RP).

In pratica, ti servono 3 shift register (che chiameremo D, C ed R), un sottrattore e un "comparatore" (un circuito che controlla se un numero è maggiore di un altro). R dev'essere a input seriale e output parallelo, D dev'essere a input parallelo e output seriale, mentre dev'essere possibile inserire un input sia parallelo che seriale in C (il cui output è parallelo). L'output di D dev'essere collegato all'input seriale di C.

1) Si inserisce il dividendo in D.

2) Left shift di D, che quindi immetterà il suo MSB in C, e di C.

3) Controllare se C è maggiore del dividendo (che chiamerò G). Se lo è, inserire un 1 in R, eseguire C-G e inserire il risultato di quest'operazione in C. Se non lo è, inserire uno 0 in R.

4) Se D è vuoto (tutti i bit sono 0), concludere l'operazione restituendo R come quoziente e C come resto. Se D non è vuoto, ripetere dal passaggio 2.

Penso che funzioni, ma divertiti con tutti quei D Flip-flop XD

Ciao

Ian

wow...ti sono infinitamente grato, ma avrei ancora qualche dubbio: da quel che ho capito si tratta dell'algoritmo della divisione in colonna, quindi nel terzo passaggio G non dovrebbe essere il divisore? poi io conoscevo solo un tipo di shift register... quindi i nomi ''seriale'' e ''parallelo'' mi sono nuovi, ti va di spiegarmi la differenza? in ogni caso grazie per la pazienza :D

p.s. se a lavoro ultimato metterò la calcolatrice sul tubo sicuramente ti citerò nella descrizione, se hai un canale linkamelo per MP ^^

Share this post


Link to post
Share on other sites
  • 0

Penso sia fattibile (sono troppo pigro per metterlo in pratica XD), ma lento come una merda (se non usi RP).

In pratica, ti servono 3 shift register (che chiameremo D, C ed R), un sottrattore e un "comparatore" (un circuito che controlla se un numero è maggiore di un altro). R dev'essere a input seriale e output parallelo, D dev'essere a input parallelo e output seriale, mentre dev'essere possibile inserire un input sia parallelo che seriale in C (il cui output è parallelo). L'output di D dev'essere collegato all'input seriale di C.

1) Si inserisce il dividendo in D.

2) Left shift di D, che quindi immetterà il suo MSB in C, e di C.

3) Controllare se C è maggiore del dividendo (che chiamerò G). Se lo è, inserire un 1 in R, eseguire C-G e inserire il risultato di quest'operazione in C. Se non lo è, inserire uno 0 in R.

4) Se D è vuoto (tutti i bit sono 0), concludere l'operazione restituendo R come quoziente e C come resto. Se D non è vuoto, ripetere dal passaggio 2.

Penso che funzioni, ma divertiti con tutti quei D Flip-flop XD

Ciao

Ian

ehm... che lingua è???

Share this post


Link to post
Share on other sites
  • 0

Io l'ho costruito, il procedimento è più o meno simile, ma c'è un solo flip flop in ingresso, e uno shift register per il risultato.

Funziona abbastanza bene, però il processo è un pò lunghino, ogni "ciclo" dura circa 7 secondi, e la macchina ha tanti cicli quanto vuoi che sia preciso il risultato. Ad esempio il mio, ha imputi da 10 bit, e un risultato da 20 bit, 10 cifre decimali. Da un risultato molto preciso, (alla 3° cifra decimale dopo la virgola) però implica 20 cicli, quindi più di due minuti di calcolo.

Ho provato a costruirne uno differente, senza clock, e senza processo di calcolo, unendo tutte le diverse "capsule di base" (comparatore, sottrattore) in serie. Con questo basta immettere l'imput e automaticamente uscirà l'output, però viene qualcosa di enorme. E il lag fa durare il processo parecchio di più dell'altra versione.

Non sono sicuro di aver capito come funziona, puoi spiegarti un po' più dettagliatamente?

wow...ti sono infinitamente grato, ma avrei ancora qualche dubbio: da quel che ho capito si tratta dell'algoritmo della divisione in colonna, quindi nel terzo passaggio G non dovrebbe essere il divisore?

Sì, solo che son dislessico :facepalm:

Ah, tra l'altro, mi sono sbagliato: non basta controllare che D sia 0, bisogna essere sicuri che abbia effettuato tanti left shift quanti sono i bit di cui è composto. Un modo di evitare di aggiungere un counter è di aggiungere un bit settato a 1 dopo il LSB quando si immette il dividendo in D, e controllare la "vuotezza" di D dopo averlo left shiftato ma prima di left shiftare C.

poi io conoscevo solo un tipo di shift register... quindi i nomi ''seriale'' e ''parallelo'' mi sono nuovi, ti va di spiegarmi la differenza?

Partendo da un registro costruito con D-FlipFlop, input seriale vuol dire che ha un unico bit in input che viene di volta in volta "shiftato" al D-ff successivo, mentre input parallelo significa che i bit in input sono tanti quanti i D-ff e vengono immessi tutti contemporaneamente in essi; similmente l'output seriale consiste in un unico output che riceve di volta in volta l'ultimo bit shiftato "fuori" dal registro, mentre l'output seriale consiste nella stringa di bit rappresentata dagli output di tutti i D-ff.

in ogni caso grazie per la pazienza :D

Figurati, è un piacere.

p.s. se a lavoro ultimato metterò la calcolatrice sul tubo sicuramente ti citerò nella descrizione, se hai un canale linkamelo per MP ^^

Penso che tu abbia buone probabilità di trovare il nome tirando a indovinare xD

Ma ho solo caricato un paio di video quasi a muzzo per ora...

ehm... che lingua è???

Nerdese? Redstonerdese? :asd:

Ciao

Ian

  • Like 1

Share this post


Link to post
Share on other sites
  • 0
Partendo da un registro costruito con D-FlipFlop, input seriale vuol dire che ha un unico bit in input che viene di volta in volta "shiftato" al D-ff successivo, mentre input parallelo significa che i bit in input sono tanti quanti i D-ff e vengono immessi tutti contemporaneamente in essi; similmente l'output seriale consiste in un unico output che riceve di volta in volta l'ultimo bit shiftato "fuori" dal registro, mentre l'output seriale consiste nella stringa di bit rappresentata dagli output di tutti i D-ff.

chiarissimo, ora mi aspetta un po' di lavoro ^^

Share this post


Link to post
Share on other sites
  • 0

Nerdese? Redstonerdese? :asd:

Ciao

Ian

ahahaha Ian ti stimo troppo! xD

Share this post


Link to post
Share on other sites
  • 0

Non sono sicuro di aver capito come funziona, puoi spiegarti un po' più dettagliatamente?

In sostanza tu inserisci il dividendo, che viene salvato in una serie di flip flop, e il divisore che invece rimane fisso per tutto il processo. Quando avvii il processo, il flip flop registra il dato iniziale (dividendo) e lo invia ad un comparatore che lo confronta con il divisore. Entrambi i numeri sono inviati ad un sottrattore, tuttavia, la via del divisore al sottrattore è controllata dal comparatore, cioè permette al segnale di passare solo se il dividendo è maggiore del divisore. Se questo avviene, abbiamo in uscita la differenza fra i due valore. Dopodichè l'output è collegato nuovamente con l'imput di partenza, traslato di una tacca verso destra, in modo che ad ogni ciclo di clock (quando i flop flop registrano nuovamente) il ciclo riparta con il divisore spostao verso di un numero verso destra, così si replica praticamente il procedimento della divisione in colonna.

Ovviamente al termine di ogni ciclo, viene registrato il valore uscente dal comparatore, che è 0 se il divisore è più grande del dividendo, e 1 viceversa. Al termine dei cicli si può vedere il risultato con 10 cifre decimali, e il possibile resto.

E' interessante perchè la precisione del numero ottenibile è praticamente infinita, se non in limiti di tempo richiesto, basta aumentare il numero dei cicli.

Share this post


Link to post
Share on other sites
  • 0

In sostanza tu inserisci il dividendo, che viene salvato in una serie di flip flop, e il divisore che invece rimane fisso per tutto il processo. Quando avvii il processo, il flip flop registra il dato iniziale (dividendo) e lo invia ad un comparatore che lo confronta con il divisore. Entrambi i numeri sono inviati ad un sottrattore, tuttavia, la via del divisore al sottrattore è controllata dal comparatore, cioè permette al segnale di passare solo se il dividendo è maggiore del divisore. Se questo avviene, abbiamo in uscita la differenza fra i due valore. Dopodichè l'output è collegato nuovamente con l'imput di partenza, traslato di una tacca verso destra, in modo che ad ogni ciclo di clock (quando i flop flop registrano nuovamente) il ciclo riparta con il divisore spostao verso di un numero verso destra, così si replica praticamente il procedimento della divisione in colonna.

Ovviamente al termine di ogni ciclo, viene registrato il valore uscente dal comparatore, che è 0 se il divisore è più grande del dividendo, e 1 viceversa. Al termine dei cicli si può vedere il risultato con 10 cifre decimali, e il possibile resto.

E' interessante perchè la precisione del numero ottenibile è praticamente infinita, se non in limiti di tempo richiesto, basta aumentare il numero dei cicli.

E dove sta la differenza col sistema da me descritto?

Ciao

Ian

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By ILQUASIPRO0 ( youtuber )
      volevo fare una porta che si apre usando su di essa un determinato oggetto ( se possibile ) e se possibile senza fare troppe modifiche vicine alla porta
    • By Jiyuwa
      Salve, cerco gente alla quale piace la redstone per fare una vanilla insieme. Dispongo di un server ma non è molto potente, al massimo lo hosto su un mio secondo pc. 
      Regole:
      Rispetto
      Non distruggere a caso
      Non fare build ingombranti al centro della mappa, vorrei creare una città gestita da circuiti, redstone ec...
      Avere passione

      P.s. Non uso la redstone da molto, ma apprezzo sempre ad imparare cose nuove. Da java soprattutto non gioco da molto e le fisiche sono molto diverse dalla pe

      Aspetto risposte, se volete contattatemi su discord a        ジユわ - Libero ed In Pace - Jiyuwa#6511        , oppure scrivete sotto al forum. 
      Grazie
      Ho proprio voglia di fare una vanilla 
    • By Didro91
      Ciao ragazzi e ragazze,
      sono un player che usa molto la redstone ma ultimamente non ho più idee per meccanismi perché ne ho fatti veramente tanti. Qualcuno/a saprebbe consigliarmi qualche idea per sei meccanismi? 
      Potete scrivermi da whatsapp con messaggi normali o chiamate al numero: 3409490309 
      P.S. Penso di fare una casa di redstone quindi se mi darete i consigli potrò mettere nella mia mappa i nomi di chi mi ha consigliato  i circuiti
      GRAZIE IN ANTICIPO 
    • By raffaele9004
      Salve a tutti, oggi sono qui per presentarvi un mio nuovo progetto, una lavagna redstone di dimensioni 44x44 utile per creare pixel art in 2d con le lampade redstone, mi sono ispirato ad una cosa simile già esistente ma non ho scaricato la custom map, quindi non so se la mia lavagna è più compatta o meno.

      Ecco alcuni screen del meccanismo:






      Come funziona:
      -Inserire le coordinate(verticale e orizzontale) per accendere una 2x2 lampada redstone. Se inserite poi le stesse coordinate potrete spegnere la lampada(le coordinate sono indicate da blocchi di colori diversi).
      è possibile inserire più coordinate verticali e una orizzontale e viceversa per poter accendere più lampade contemporanemante.

      Fare attenzione:
      -Ogni volta inserita una coordinata verticale e orizzontale, attendere che si accenda/spenga la lampada redstone che si voleva interagire prima di inserirne un altra;
      -Il meccanismo utilizza anche dell'acqua, questa si trova circondata da blocchi di terracotta quindi non distruggere quei blocchi a meno che non vogliate fare una strage al meccanismo (xD);
      -Se usate il pulsante "invertitore"(che vi parlerò dopo), aspettare 35 secondi prima di ripremerlo o mettere una nuova coordinata.

      Extra:
      -Pulsante invertitore:
      permette di accendere le lampade redstone che sono spente e viceversa di tutta la lavagna;
      -Pulsanti "cambio":
      permettono di cambiare una o più coordinate verticali o orizzontali.

      Questo è tutto ciò che bisogna sapere sul meccanismo, spero che vi piaccia.
      Ecco qui il download:

      ------DOWNLOAD-----
    • By DengelGame
      Ragazzi sapete dirmi se tramite NBTexplorer o in qualsiasi altro modo, si possano svuotare tutte le chest di una mappa?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.