DOMANDA Numero intero 16Byte

DummyMan

Nuovo Utente
4
1
Ciao a tutti,
volevo chiedervi se è possibile rappresentare un numero intero da 16byte in un numero che occupa meno bytes.


Grazie a tutti.
 

JakeTheDog

Utente Èlite
1,949
662
CPU
ryzen 5 1600@3.7GHz 1.23v
Dissipatore
alphacool eisbear
Scheda Madre
asus rog strix x370i
HDD
seagate barracuda 1Tb + samsung 840 pro
RAM
2x8GB gskill trident z 3600c17
GPU
sapphire rx 480 nitro 8GB @1306/2250
Monitor
dell u2414h
PSU
corsair cs650m
Case
in win 301
OS
windows 10
Ciao a tutti,
volevo chiedervi se è possibile rappresentare un numero intero da 16byte in un numero che occupa meno bytes.


Grazie a tutti.

Non sono sicuro di aver capito la domanda, ma comunque con 16B, che sono 128b, puoi rappresentare tutti i numeri interi da 0 a 2^128
 

DummyMan

Nuovo Utente
4
1
Grazie per la risposta, non è quello che volevo sapere.

Proverò a spiegarmi meglio.

Supponiamo di avere un numero compreso nel range tra 0 & 2^128

Per esempio il numero 24323156756858764 (17 cifre) viene rappresentato in forma binaria in *01010110011010011100100000111110010011110000011110001100‬ (57 cifre)

Sappiamo che la rappresentazione binaria del numero non può essere abbreviata (almeno per quanto ne so io)

La rappresentazione decimale può, per esempio, essere scomposta in m.c.m e cambiare sostanzialmente la sua rappresentazione numerica e la sua lunghezza.

Mi piacerebbe sapere se esiste un metodo per ridurre la dimensione/lunghezza della rappresentazione decimale (vedi esempio da 17 cifre)

Grazie per le risposte
 

JakeTheDog

Utente Èlite
1,949
662
CPU
ryzen 5 1600@3.7GHz 1.23v
Dissipatore
alphacool eisbear
Scheda Madre
asus rog strix x370i
HDD
seagate barracuda 1Tb + samsung 840 pro
RAM
2x8GB gskill trident z 3600c17
GPU
sapphire rx 480 nitro 8GB @1306/2250
Monitor
dell u2414h
PSU
corsair cs650m
Case
in win 301
OS
windows 10
Quindi se ho capito bene quando parli della rappresentazione decimale ti riferisci ad una cosa di questo tipo

temp.PNG

pero' a te interessa il contrario, cioe' hai un numero intero grande e vuoi trovarne i fattori (diciamo che sono k) in modo da riscriverlo come prodotto di essi ed avere solo k cifre al posto delle n cifre del numero (nel tuo esempio 17), ho capito bene?
Non cambia pero' il fatto che ogni fattore avra' una sua rappresentazione binaria, che richiedera' un certo numero di bit che in totale non penso proprio possa essere minore del numero di bit richiesti per rappresentare il numero iniziale.
 
  • Mi piace
Reazioni: DummyMan
U

Utente 16812

Ospite
In realtà nei sistemi di trasmissione numerica PCM (modulazione ad impulsi di codice), utilizzati nelle telecomunicazioni, dopo l'operazione di campionamento, effettuata mediante la tecnica PAM, avviene la cosiddetta "quantizzazione dei livelli", ossia i campioni possono assumere solo un numero "discreto" di valori, per la precisione 256 livelli (128 positivi e 128 negativi) per quanto riguarda lo standard telefonico :asd:
Ora, se tale quantizzazione è lineare, cioè distribuita uniformemente su tutta la gamma dei livelli, è ovvio che il rumore di quantizzazione risulta anch'esso costante, per cui è considerevole soprattutto alle basse tensioni.
Detto in parole povere, il rapporto S/N peggiora alle piccole ampiezze.
Ecco perché attualmente si attua una quantizzazione non lineare, di tipo logaritmico, che in pratica "addensa" i livelli in corrispondenza delle ampiezze più piccole.
Per realizzare tale tipo di quantizzazione si utilizza un compressore numerico (in pratica un amplificatore logaritmico), in uscita al codificatore a 12 bit, che effettua la conversione da 12 a 8 bit :asd:
http://docente.reteistituti.it/useruploads/MGNFNC52E01H501L/files/modulazione_pam-pcm.pdf (da pag. 19 in poi) :sisilui:
Uno degli algoritmi di compressione più noti, utilizzato nella trasmissione numerica, è certamente l'algoritmo di Huffman:
http://people.na.infn.it/~bene/ASD/Benerecetti/Modulo-II-2008/09-Codici di Huffman.pdf
Come funziona: Compressione - Algoritmo di Huffman :sisi:
A presto :ciaociao:
 
  • Mi piace
Reazioni: DummyMan

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Grazie per la risposta, non è quello che volevo sapere.

Proverò a spiegarmi meglio.

Supponiamo di avere un numero compreso nel range tra 0 & 2^128

Per esempio il numero 24323156756858764 (17 cifre) viene rappresentato in forma binaria in *01010110011010011100100000111110010011110000011110001100‬ (57 cifre)

Sappiamo che la rappresentazione binaria del numero non può essere abbreviata (almeno per quanto ne so io)

La rappresentazione decimale può, per esempio, essere scomposta in m.c.m e cambiare sostanzialmente la sua rappresentazione numerica e la sua lunghezza.

Mi piacerebbe sapere se esiste un metodo per ridurre la dimensione/lunghezza della rappresentazione decimale (vedi esempio da 17 cifre)

Grazie per le risposte

Rappresentazione esadecimale? Il numero decimale scritto da te sopra diverrebbe 5669C83E4F078C ( 14 cifre ) @gronag :grat::grat: l'hai presa un pò larga per fare un'esempio :lol:
 
U

Utente 16812

Ospite
Rappresentazione esadecimale? Il numero decimale scritto da te sopra diverrebbe 5669C83E4F078C ( 14 cifre ) @gronag :grat::grat: l'hai presa un pò larga per fare un'esempio :lol:

In realtà quello che hai fatto è stato di ottenere una rappresentazione più compatta, passando dalla base 10, che utilizza 10 simboli, alla base esadecimale, che ne utilizza 16, ma dal punto di vista della rappresentazione binaria non è cambiato nulla poiché ogni cifra esadecimale corrisponde a 4 cifre binarie, per cui il numero di bit è lo stesso, prima e dopo la conversione (14x4=56 bit) :asd:
Quello che ho inteso io, invece, è il fatto che è possibile passare, attraverso una vera e propria compressione "binaria" svolta con particolari algoritmi, da una rappresentazione binaria con un certo numero di bit ad un'altra rappresentazione, sempre binaria, con un numero inferiore di bit rispetto alla prima, come di fatto avviene nella quantizzazione logaritmica dei sistemi di modulazione numerica PCM :sisilui:
Sarà l'apertore del thread, poi, a decidere se ciò che ho scritto può essergli di aiuto o meno ;)
 
  • Mi piace
Reazioni: rodhellas

BAT

Moderatore
Staff Forum
Utente Èlite
22,675
11,454
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
sarebbe utile sapere a che serve un numero con una rappresentazione tanto estesa, e a cosa dovrebbe servire. A parte il C# (con il tipo decimal, che però non è un tipo intero) non mi pare che ci siano linguaggi che abbiano tipi "primitivi" a 128 bit (Java ha un paio di classi per numeri grandi -BigInteger è quella per gli interi- ma non è la stessa cosa)
 
  • Mi piace
Reazioni: DummyMan

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
sarebbe utile sapere a che serve un numero con una rappresentazione tanto estesa, e a cosa dovrebbe servire. A parte il C# (con il tipo decimal, che però non è un tipo intero) non mi pare che ci siano linguaggi che abbiano tipi "primitivi" a 128 bit (Java ha un paio di classi per numeri grandi -BigInteger è quella per gli interi- ma non è la stessa cosa)

Credo sia proprio questo il motivo della domanda, ridurre fino ad una lunghezza usabile. Sarebbe da chiedere dove l'ha tirato fuori quel pò pò di bit :asd:
 

DummyMan

Nuovo Utente
4
1
Ringrazio tutti per le vostre risposte.

sarebbe utile sapere a che serve un numero con una rappresentazione tanto estesa, e a cosa dovrebbe servire. A parte il C# (con il tipo decimal, che però non è un tipo intero) non mi pare che ci siano linguaggi che abbiano tipi "primitivi" a 128 bit (Java ha un paio di classi per numeri grandi -BigInteger è quella per gli interi- ma non è la stessa cosa)

Il numero dei bit dell'informazione iniziale può essere variabile, ho pensato che utilizzando un intero con un numero di bit elevati la differenza tra l'originale e il valore convertito sarebbe stata più evidente.


In realtà quello che hai fatto è stato di ottenere una rappresentazione più compatta, passando dalla base 10, che utilizza 10 simboli, alla base esadecimale, che ne utilizza 16, ma dal punto di vista della rappresentazione binaria non è cambiato nulla poiché ogni cifra esadecimale corrisponde a 4 cifre binarie, per cui il numero di bit è lo stesso, prima e dopo la conversione (14x4=56 bit) :asd:
Quello che ho inteso io, invece, è il fatto che è possibile passare, attraverso una vera e propria compressione "binaria" svolta con particolari algoritmi, da una rappresentazione binaria con un certo numero di bit ad un'altra rappresentazione, sempre binaria, con un numero inferiore di bit rispetto alla prima, come di fatto avviene nella quantizzazione logaritmica dei sistemi di modulazione numerica PCM :sisilui:
Sarà l'apertore del thread, poi, a decidere se ciò che ho scritto può essergli di aiuto o meno ;)

Le tue informazioni mi sono state utili, ma non rispondono a pieno alla mie necessità.
Cmq ti ringrazio perchè è stata una lettura interessante :)

Credo sia proprio questo il motivo della domanda, ridurre fino ad una lunghezza usabile. Sarebbe da chiedere dove l'ha tirato fuori quel pò pò di bit :asd:

Li ho trovati li da qualche parte...:hihi:
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
L'unico modo che hai di ridurre il numero di bit necessari per rappresentare un valore è una compressione. Cambiare la base (binaria, ottale, esadecimale, decimale...) non riduce il numero di bit necessari.
Tuttavia la compressione non da garanzie su quanto il dato può essere compresso, dipende dal valore in questione e comunque è tipicamente inefficace per dati di dimensione di pochi byte.
 
  • Mi piace
Reazioni: Utente 16812
U

Utente 16812

Ospite
L'unico modo che hai di ridurre il numero di bit necessari per rappresentare un valore è una compressione. Cambiare la base (binaria, ottale, esadecimale, decimale...) non riduce il numero di bit necessari.
Tuttavia la compressione non da garanzie su quanto il dato può essere compresso, dipende dal valore in questione e comunque è tipicamente inefficace per dati di dimensione di pochi byte.

Sì, ne ho parlato nel mio post precedente (#5) a proposito della codifica PCM :sisilui:
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Sì, ne ho parlato nel mio post precedente (#5) a proposito della codifica PCM :sisilui:
Algoritmi di compressione richiedono l'uso di dizionari (nel caso dell'Huffman è praticamente l'albero) per cui la rappresentazione è si potenzialmente più contenuta ma richiede strutture ausiliarie che occupano spazio.
La compressione sfrutta l'idea che i dati non sono casuali e più grande è la mole di dati e più facile è trovare pattern da comprimere.
Ma se lavoriamo su singoli valori a 16bit indipendenti fra loro, comprimerli ognuno per conto proprio non porta a nessun beneficio.

Per quanto riguarda la compressione numerica nei sistemi PCM (in inglese la chiamano "companding" mi pare), mi risulta sia una compressione lossy. Funziona bene con segnali campionati perchè ne sfrutta le caratteristiche dinamiche ma comunque dei 12 bit originali alcuni vengono persi e settati arbitrariamente (per minimizzare il massimo errore dinamico introdotto). Ma l'errore c'è, quindi non la possiamo definire come diversa rappresentazione, è proprio un altro valore.
 
Ultima modifica:
  • Mi piace
Reazioni: Utente 16812
U

Utente 16812

Ospite
Nel PCM "telefonico", a tutt'oggi ancora utilizzato per la telefonia fissa e che richiede una banda di 64kbps (la stessa banda di un canale ISDN), si ottiene la stessa qualità dei campioni a 12 bit, campionati a 8KHz, con soli 8 bit e questo perché i segnali vocali hanno una dinamica limitata (di solito frequenze non superiori a 4KHz) :asd:
E' ovvio, poi, che, come dici tu, volendo comprimere un documento non possiamo permetterci di perdere neanche un bit mentre nel caso dell'audio è accettabile un certo compromesso sulla degradazione dei segnali :sisilui:
Le tecniche di codifica più utilizzate nel dominio del tempo, la DPCM (PCM "differenziale") e l'ADPCM (PCM differenziale "adattativo"), hanno effettivamente una bassa efficienza e sono state superate dai nuovi algoritmi, come ad esempio quelli LPC (codifica predittiva lineare) e CELP, utilizzati nei telefonini GSM (sotto forma di EFR) e su Internet (VoIP) :sisilui:
Infine ci sono alcuni algoritmi che codificano i segnali nel dominio delle frequenze, come lo standard MPEG/Audio e l'MP3 (che costituisce il famoso "layer 3", ossia lo strato 3, dell'MPEG) :asd:
Entrambe le tecniche (CELP per la voce e MP3 per la musica) sono lossy.
L'MPEG4, uno degli ultimi standard a codificare sia la voce che la musica, utilizza la tecnica HXVC (ma anche il CELP) per la codifica del parlato e l'AAC (ma anche il Twin-VQ) per la codifica della musica, si tratta di una tecnologia molto complessa che usa particolari modelli psico-acustici, tra cui il "mascheramento" audio :ciaociao:

P.S. Grazie del tuo feedback, @1nd33d ;)

- - - Updated - - -

Nel PCM "telefonico", a tutt'oggi ancora utilizzato per la telefonia fissa e che richiede una banda di 64kbps (la stessa banda di un canale ISDN), si ottiene la stessa qualità dei campioni a 12 bit, campionati a 8KHz, con soli 8 bit e questo perché i segnali vocali hanno una dinamica limitata (di solito frequenze non superiori a 4KHz) :asd:
E' ovvio, poi, che, come dici tu, volendo comprimere un documento non possiamo permetterci di perdere neanche un bit mentre nel caso dell'audio è accettabile un certo compromesso sulla degradazione dei segnali :sisilui:
Le tecniche di codifica più utilizzate nel dominio del tempo, la DPCM (PCM "differenziale") e l'ADPCM (PCM differenziale "adattativo"), hanno effettivamente una bassa efficienza e sono state superate dai nuovi algoritmi, come ad esempio quelli LPC (codifica predittiva lineare) e CELP, utilizzati nei telefonini GSM (sotto forma di EFR) e su Internet (VoIP) :sisilui:
Infine ci sono alcuni algoritmi che codificano i segnali nel dominio delle frequenze, come lo standard MPEG/Audio e l'MP3 (che costituisce il famoso "layer 3", ossia lo strato 3, dell'MPEG) :asd:
Entrambe le tecniche (CELP per la voce e MP3 per la musica) sono lossy.
L'MPEG4, uno degli ultimi standard a codificare sia la voce che la musica, utilizza la tecnica HXVC (ma anche il CELP) per la codifica del parlato e l'AAC (ma anche il Twin-VQ) per la codifica della musica, si tratta di una tecnologia molto complessa che usa particolari modelli psico-acustici, tra cui il "mascheramento" audio :ciaociao:

P.S. Grazie del tuo feedback, @1nd33d ;)

gronag :sisilui:
Cibernetico e insegnante :asd:
 
Ultima modifica da un moderatore:

DummyMan

Nuovo Utente
4
1
Grazie a tutti per le vostre preziose risposte, speravo di trovare qualcosa di diverso dai soliti algoritmi per la compressione dati più conosciuti.

Grazie ancora a tutti.
 
  • Mi piace
Reazioni: Utente 16812

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili