|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
divisioni binarie
Non è esattamente un discorso di programmazione, più che altro sarebbe un'implementazione di divisore binario con 3 bit di dividendo e divisore.
Ovviamente l'output sono sia quoziente che resto. Io le operazioni le ho fatte e vengono, ma il risultato in alcune soluzioni non ha alcun senso... aiutatemi please ![]() Il problema che ho è questo: supponendo che io abbia una divisione Codice:
001 / 110 Codice:
000 Codice:
001 Codice:
DIVIDENDO = DIVISORE x RISULTATO + RESTO ma di consequenza, qualsiasi operazione con dividendo < divisore ha come risultato Codice:
000 ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Be', direi proprio di sì... Cosa stai facendo, un circuito combinatorio?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
Esattamente, sto implementando un circuito per una calcolatrice binaria con operandi a 4 bit.
Addizione/sottrazione e moltiplicazione sono operazioni banali, il problema viene nella divisione... Comunque la prima parte dell'errore è stata trovata... in realtà dovrei ottenere come risultato anche i numeri dopo la virgola, invece di ottenere quoziente più resto... Ho buttato giù una tabellina riassuntiva dei risultati e degli scarti dal valore corretto, ha operandi a 3 bit perchè a 4 veniva troppo lunga e non c'avevo voglia ![]() Codice:
OP1 OP2 RISULTATO DECIM. SCARTO ---------------------------------------------- 001 001 001.0000 1 0 001 010 000.1000 0.5 0 001 011 000.0101 0.3333 0.0208 001 100 000.0100 0.25 0 001 101 000.0011 0.2 0.0125 001 110 000.0010 0.1667 0.0417 001 111 000.0010 0.1428 0.0178 ---------------------------------------------- 010 001 010.0000 2 0 010 010 001.0000 1 0 010 011 000.1010 0.6667 0.0417 010 100 000.1000 0.5 0 010 101 000.0110 0.4 0.025 010 110 000.0101 0.3333 0.0208 010 111 000.0100 0.2857 0.0375 ---------------------------------------------- 011 001 011.0000 3 0 011 010 001.1000 1.5 0 011 011 001.0000 1 0 011 100 000.1100 0.75 0 011 101 000.1001 0.6 0.0375 011 110 000.1000 0.5 0 011 111 000.0110 0.4286 0.0536 ---------------------------------------------- 100 001 100.0000 4 0 100 010 010.0000 2 0 100 011 001.0101 1.333 0.0208 100 100 001.0000 1 0 100 101 000.1100 0.8 0.05 100 110 000.1010 0.6667 0.0417 100 111 000.1001 0.5714 0.0089 ---------------------------------------------- 101 001 101.0000 5 0 101 010 010.1000 2.5 0 101 011 001.1010 1.6667 0.0417 101 100 001.0100 1.25 0 101 101 001.0000 1 0 101 110 000.1101 0.8333 0.0208 101 111 000.1011 0.7143 0.0268 ---------------------------------------------- 110 001 110.0000 6 0 110 010 011.0000 3 0 110 011 010.0000 2 0 110 100 001.1000 1.5 0 110 101 001.0011 1.2 0.0125 110 110 001.0000 1 0 110 111 000.1101 0.8571 0.0446 ---------------------------------------------- 111 001 111.0000 7 0 111 010 011.1000 3.5 0 111 011 010.0101 2.3333 0.0208 111 100 001.1100 1.75 0 111 101 001.0110 1.4 0.025 111 110 001.0010 1.1667 0.0417 111 111 001.0000 1 0 ---------------------------------------------- ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() In caso di divisione per zero invece che risultato dai? Vedo che l'hai omesso dai possibili input. ![]() Ma una curiosità: lo stai facendo per hobby/studio o è una cosa più seria? Perché se è la seconda, non ho certo l'esperienza per permettermi anche solo di consigliarti... ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 29-06-2008 alle 20:55. |
|
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
E' cosi' in qualsiasi base (giustamente i risultati delle operazioni sono indipendenti dalla base) 45/60 = 0 resto 45 5/9 = 0 resto 5 3/4 = 0 resto 3 Quote:
Ripassa quello che ci veniva insegnato alle elementari. Quello della calcolatrice e' identico, se non che e' in base 2 (che e' ancora piu' semplice della base 10). Ovviamente la strada di memorizzarsi tutte le possibili combinazioni funziona... ma solo fino ad un certo punto. Se invece di 3 bit fosse a 16 bit, dovresti memorizzare 4GB di dati, per la sola divisione a 16bit. Pensa la 32bit...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non serve effettivamente memorizzare quei dati, ma avendo un circuito che presenta 8 bit in input sugli ingressi (4+4 dei due operandi) puoi farti un bel tabellone e poi implementare un circuito che codifichi le funzioni booleane di tutti e 8 i bit da presentare in output... ma non so fino a che punto convenga un lavoraccio così.
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
Difatti la tabella era solo per avere un'idea di base sui vari risultati e capire bene o male come dovevo comportarmi.
In realtà come ho detto la divisione l'ho già implementata, ma i risultati han poco senso. dividendo/(valore > dividendo) da come risultato sempre 0 e resto dividendo, che sebbene voi diciate sia corretto è in ogni caso un risultato poco significativo... Se io faccio 1/2 ed 1/3 i risultati sono diversi, mentre io ottengo il medesimo risultato. Ho pensato perciò di ottenere 4 bit di risultato intero e 4 bit di risultato dopo la virgola, così da ottenere un risultato significativo e diverso per ogni divisione. Qualche idea? E' meglio lasciar perdere? Come potrei impostare il circuito? ![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Se invece vuoi le virgole, allora di nuovo ti consiglio di studiare l'algoritmo della divisione delle elementari, che e' quello usato anche dai nostri processori.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
Comincio a capirci qualcosa... In pratica io avrei implementato (senza neanche saperlo
![]() Ho reinventato la divisione ![]() A parte gli scherzi, proverò ad implementare la divisione trasformando il risultato in numero reale, ma non credo di fare in tempo per la consegna... Proverò a contattare il professore e sentire un suo parere. In ogni caso ogni consiglio è bene accetto e grazie ad entrambi ![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
Potreste semplificarmi questa equazione? Sono un caprone
![]() ABC+AB'C'D'+A'B'CD'+A'BC'+BD = E vorrei utilizzare pure xor, nor xnor o quello che è, non sono stato capace io ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non credo sia ulteriormente semplificabile, non mi sembra che ci siano termini a distanza di Hamming unitaria.
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
Grazie mille, ho già implementato tutto, ma risulta un pò complessa da decifrare
![]() So che quello che ho fatto "dovrebbe" permettermi di calcolare la sottrazione su singolo bit, ma sebbene sia corretto non mi tornano i conti ![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
E allora non è corretto.
![]() Il problema è che se ti scappa una connessione sbagliata salta tutto. ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 8152
|
scemo
![]() ![]() ![]() Ehm... era tutto corretto quello che avevo già fatto, se non fosse che avevo invertito gli ingressi due volte e quindi alla fine tornava, ma prendendoli singolarmente non tornavano i conti ![]() Comunque finito, consegnato e ricevuto i complimenti dal professore per il bel lavoro. ![]() Volevo uppare lo schema qua, ma non posso allegarlo perchè troppo pesante, casomai qualcuno fosse interessato ( ![]() PS: grazie dell'aiuto ad entrambi ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:58.