Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2007, 22: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, 22: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, 23: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, 23: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, 08: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, 09: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, 09: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, 11: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, 12: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, 12: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, 18: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, 20: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, 15: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, 15: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, 17: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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
CoopVoce lancia le sue prime offerte 5G:...
Rivoluzione The Elder Scrolls Online: un...
Lo strapotere cinese è evidente c...
GeForce RTX 6000: niente SUPER e attesa ...
Anche gli Stati Uniti puntano il dito co...
È cinese la prima (enorme) pala e...
A Pechino è record di giorni con ...
Lenovo al CES 2026: Qira, IA ambientale ...
Le sette startup italiane che ridefinisc...
Philips Hue SpatialAware: la configurazi...
Sport & Lifestyle: performance, dati...
Le novità HP al CES 2026 tra AI P...
Gigabyte propone OLED per tutti con lumi...
Musk contro OpenAI, la guerra arriva in ...
Nuovi desktop e laptop ASUS: la sicurezz...
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: 21:52.


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