Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2007, 21:35   #1
ubanton
Senior Member
 
L'Avatar di ubanton
 
Iscritto dal: Nov 2003
Messaggi: 1102
Conversione numeri in floating point: come si fa?

Ragazzi,
domani ho l'esame di fondamenti di informatica, ma non so fare la conversione dei numeri reali in floating point(virgola mobile) e soprattutto una volta ottenuto in binario non so come disporlo per la mantissa e come si calcola l'esponente.
Se qualcuno mi da una mano, per favore
ubanton è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2007, 21:53   #2
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
se ho capito bene quello che devi fare(anche io seguo fondamenti ma da poco) in c++ puoi usare static_cast presente nell'headers <iomanip>

in questo modo

Codice:
#include <iomanip>
[...]
cout << static_cast < float > (variabiledaconvertire);
dai anche un occhio a setprecision e setw presenti sempre in io manip.. spero di esserti stato utile
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2007, 22:06   #3
ubanton
Senior Member
 
L'Avatar di ubanton
 
Iscritto dal: Nov 2003
Messaggi: 1102
a me serve la conversione a mano

non mi serve per c, mi dovresti dire come si calcola la mantissa
ubanton è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2007, 22:49   #4
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da ubanton Guarda i messaggi
non mi serve per c, mi dovresti dire come si calcola la mantissa
Devi fare la conversione da decimale a binario di un numero in virgola mobile?
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 07:09   #5
ubanton
Senior Member
 
L'Avatar di ubanton
 
Iscritto dal: Nov 2003
Messaggi: 1102
si devo fare quella

mi trovo il numero in binario puro sia quello intero e quello decimale però poi non riesco a calcolarmi la mantissa, se mi potessi fare un esempio grazie
ubanton è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 08:21   #6
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da ubanton Guarda i messaggi
mi trovo il numero in binario puro sia quello intero e quello decimale però poi non riesco a calcolarmi la mantissa, se mi potessi fare un esempio grazie
120,35

120/2 = 60 R = 0
60/2 = 30 R = 0
30/2 = 15 R = 0
15/2 = 7 R = 1
7/2 = 3 R = 1
3/2 = 1 R = 1
1/2 = 0 R = 1

parte binaria intera = 1111000

0.35*2 = 0.70 ---> 0
0.70*2 = 1.40 ---> 1
0.40*2 = 0.80 ---> 0
0.80*2 = 1.60 ---> 1
0.60*2 = 1.20 ---> 1
0.20*2 = 0.40 ---> 0

Numero convertito = 1111000,010110 con le ultime 4 cifre periodiche.
Notare come un numero decimale finito può diventare un numero binario periodico.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 08:39   #7
ubanton
Senior Member
 
L'Avatar di ubanton
 
Iscritto dal: Nov 2003
Messaggi: 1102
io però non capisco come si genera la mantissa

quella a 23bit, cosa ci devo mettere?
ubanton è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 10:24   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se hai un numero in decimale lo devi prima convertire in modo da avere un esponente 2.
Ad esempio: 5,51*10^5 diventa 1,050949097*2^19

Log(5.51*10^5) / Log (2) = Log in base 2 (5.51*10^5)

Prendi la parte intera di questo risultato e la metti da parte, sarà il tuo esponenziale e.
Prendi la parte dopo la virgola (basta toglierci la parte intera) e fai:

2^(parte dopo la virgola) ed ottieni la mantissa m su cui la vorare

Converti la mantissa m secondo le potenze di due viste sopra.

A questo punto hai la mantissa in binario che deve essere normalizzata (deve avere un 1 in testa)...se la mantissa non ha un 1 in testa allora sposti la virgola verso destra fino a quando ha un 1 in testa. Per ogni posizione che sposti aggiungi un 1 all'esponente.
L'uno in testa non va riportato nel formato IEEE754.

A questo punto hai la forma finale della mantissa e per l'esponente ti basta aggiungere il dsiplacement ((2^(dimensione dell'esponente - 1)) - 1) ed hai la forma finale che ovviamente va messa in binario.

Se il numero decimale che ti presentano è semplice (non ha un grande esponente) puoi saltare il calcolo del logaritmo e convertire direttamente in binario il numero, a questo punto ti basta passare dalla normalizzazione per calcolare l'esponente.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 11:18   #9
ubanton
Senior Member
 
L'Avatar di ubanton
 
Iscritto dal: Nov 2003
Messaggi: 1102
ragazzi mi serve un esempio per

codifica per eccesso 2n-1, ditemi come si fa
ubanton è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 11:29   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da ubanton Guarda i messaggi
codifica per eccesso 2n-1, ditemi come si fa
La codifica per eccesso 2^(n-1) è quella che si fa per l'esponente e che ti ho detto sopra dove parlavo di displacement.

Prendi un numero decimale (positivo o negativo) e ci aggiungi (2^(n-1))-1...a questo punto converti in binario. Quindi ad esempio con n = 8 bit si ottiene che 00000000 corrisponde a -127, 01111111 corrisponde a 0, 11111111 corrisponde a +128.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 17:02   #11
blue_blue
Senior Member
 
L'Avatar di blue_blue
 
Iscritto dal: Aug 2006
Messaggi: 1192
Ciao!
Stavo per aprire una discussione per lo stesso problema, però visto che questa è già aperta..posso chiedere qui?

La prof ha spiegato qualche giorno fa queste conversioni, ma è andata troppo veloce e secondo me ha dato "qualcosina" per scontato..
Allora: io ho capito che se mi danno un numero del tipo -134.56 io prendo la parte intera e comincio a dividerla, tenendo i resti dall'ultimo al primo; poi prendo la parte frazionaria, comincio a moltiplicarla e tengo la parte intera di ciascun risultato ottenuto (ma fino a quando vado avanti così?); quindi il mio numero diventa 10000110,1000111101011100 , giusto? Adesso sposto la virgola verso sinistra di 7 posti, ottenendo 1,00001101000111101011100 x 2^7; poi prendo il 7 dell'esponente, ci sommo 127 (però non ho ben capito perché), ottenendo 134, e trasformo 134 in binario (10000110) usando la stessa regoletta di prima (divido per due e tengo i resti dall'ultimo al primo); adesso scelgo il bit del segno e, visto che -134.56 è negativo, sarà 1; poi compongo tutto e alla fine -134.56 in float mi viene questa roba qua:
1 10000110 00001101000111101011100
è giusto così o sto sbagliando da qualche parte??

poi ci ha dato anche un altro esercizio, che mi pareva simile ma invece non riesco a farlo. devo sempre convertire in float il numero 0.04 = 0,4 x 10^-1.
Io ho provato fare quello che ha spiegato cionci, così:
  • Log 0.04/Log 2 = -4.643856278
  • -4.643856278 + 4 = -0.643856278 (oppure dovevo fare -4 ugualmente?? e il segno - va bene o devo toglierlo?)
  • (supponendo che il passaggio prima sia giusto )
    2^(-0.643856278)= 0.63999996

e a questo punto cosa faccio? prendo la parte frazionaria e la converto in binario moltiplicando per 2 e tenendo le parti intere come prima? e poi come vado avanti?

Scusate per il post un po' lungo, ma ho un sacco di dubbi!
Vi ringrazio per l'aiuto
__________________
blue_blue: nickname proprio di persona, femminile, singolare
"Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani)
Fiore, sei un mito
blue_blue è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2007, 19:35   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se un numero in base 10 è senza esponente la parte dei logaritmi si può saltare. Puoi passare direttamente a convertire in binario ed a normalizzare portando la cifra ad un solo 1 in testa.
Cioè...se avessi 2.512x10^2 tanto vale convertire 251,2...ma se ho 2.512x10^55 devi usare i logaritmi.

I passaggi che hai fatto per 0.04 vanno bene. Ottieni 0.63999996 * 2^(-4)
A questo punto converti 0.63999996 in binario come ha detto nico88desmo Ed ottieni la mantissa convertita (mi sono fermato un po' presto) cioè 0,101001000. Però ricordo che ci deve essere l'uno in testa...quindi: 1,01001000 * 2^(-3)
Per lo standard IEEE754 si toglie l'uno in testa ed le restanti cifre si mettono nella mantissa, per l'esponente si aggiunge il (2^(n-1)) - 1 come visto sopra e si converte in binario.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2007, 14:02   #13
blue_blue
Senior Member
 
L'Avatar di blue_blue
 
Iscritto dal: Aug 2006
Messaggi: 1192
Grazie! Però scusa ma credo di essermi persa qualcosa
quando converto 0.63999996 in binario come ha spiegato nico88desmo devo tenere tutte le cifre decimali nella moltiplicazione o posso approssimare?
Esempio:
0.63999996 x 2 = 1,27999992 tengo 1
0,27999992 x 2 = 0,55999984 tengo 0
0,55999984 x 2 = 1,11999968 tengo 1
0,11999968 x 2 = 0,23999936 tengo 0
0,23999936 x 2 = 0,47999872 tengo 0
0,47999872 x 2 = 0,95999744 tengo 0
invece a te a questo punto viene 1..dove sto sbagliando? dipende dall'approssimazione?

e poi un'altra cosa
Quote:
per l'esponente si aggiunge il (2^(n-1)) - 1 come visto sopra e si converte in binario.
l' n nell'esempio di 0.04 che cos'è? e perchè si fanno quei due -1?
Grazie
__________________
blue_blue: nickname proprio di persona, femminile, singolare
"Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani)
Fiore, sei un mito
blue_blue è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2007, 14:34   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Io ho approssimato, te devi arrivare alla dimensione in bit della mantissa

n è la dimensione in bit dell'esponente...mettiamo che sia 8.

2^(n-1) = 128
(2^(n-1))-1 = 127

Se ho un esponente di -100 dovrò sommarci 127 ed ottengo il numero da convertire in binario per inserirlo nei bit dell'esponente di un numero IEEE754.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2007, 16:03   #15
blue_blue
Senior Member
 
L'Avatar di blue_blue
 
Iscritto dal: Aug 2006
Messaggi: 1192
Quote:
Originariamente inviato da cionci Guarda i messaggi
Io ho approssimato, te devi arrivare alla dimensione in bit della mantissa
perfetto, allora ci sono

Quote:
Originariamente inviato da cionci Guarda i messaggi
n è la dimensione in bit dell'esponente...mettiamo che sia 8.

2^(n-1) = 128
(2^(n-1))-1 = 127

Se ho un esponente di -100 dovrò sommarci 127 ed ottengo il numero da convertire in binario per inserirlo nei bit dell'esponente di un numero IEEE754.
Aaaah, forse ho capito! L'n non dipende dal numero che sto convertendo, ma in che cosa lo voglio convertire..giusto?
Cioè, adesso io sto convertendo 0.04 in float, quindi n=8 perchè 8 sono i bit "dedicati" all'esponente dei 32 totali; però se io stessi convertendo sempre 0.04 in double (non so se le regole sono le stesse, ma supponiamo di sì ) n sarebbe = 11..o non ho capito?
__________________
blue_blue: nickname proprio di persona, femminile, singolare
"Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani)
Fiore, sei un mito
blue_blue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
SpaceX guarda ai primi voli orbitali del...
Il prototipo del razzo spaziale riutiliz...
Blue Origin mostra uno spettacolare vide...
Roscosmos: la capsula Bion-M2 è r...
ASUS sperimenta GPU senza connettori di ...
La Cina conquisterà lo spazio ent...
Samsung ha un nuovo entry level: debutta...
Caos nei cieli europei: attacco informat...
Volkswagen ferma la produzione di ID.Buz...
Super sconti del weekend Amazon: 5 novit...
Dreame non si ferma più: tra le n...
Samsung Galaxy Buds3 FE a meno di 95€ su...
Praticamente regalate: 135€ per le Squie...
Si rinnovano i coupon nascosti di settem...
Amazon sconta i componenti: occasioni d'...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v