Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-04-2009, 14:38   #1
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15840
[Generico] problema con Floating-Point

Ho un problemino con i Floating-Point a singola precisione (32 bit)

Supponiamo di avere un programma che riceve in input un vettore di valori del tipo:

+2.124587e+000
-1.458789e+000
.....

poi per ogni valore fa questa operazione:

Codice PHP:
costante := +6.874521e+000

val 
:= (val*val*2.0)*costante 
e poi scrive in output tutti i val.

Bene se faccio girare questo programmino su un PowerPC 745 e su un Intel x86 a volte ho dei risutati diversi sull'ultima cifra di precisione, per esempio ho:

su ppc +2.485674e+000
su x86 +2.485675e+000

Non riesco a capire cosa succede, visto che le due cpu usano lo standard IEEE 754 dovrebbero fare calcoli ed approssimazioni nello stesso identico modo.

può essere legato al fatto che x86 è little-endian e il ppc è big-endian??
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 14:51   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
I float sono definiti in modo diverso anche nello standard IEEE
intendo, ci sono float a 32bit, a 64bit, a 128bit e anche ad 80bit (non proprio standard standard ma accettati ed estesi)
Il coprocessore degli intel internamente opera a 80bit, i PPC non penso, ma non penso comunque solo a 32bit come i tuoi input.
In pratica durante il caricamento dei registri del coprocessore avviene una conversione, una estensione.
I calcoli vengono fatti a 80bit, e poi quando vengono ritirati vengono di nuovo passati a 32bit per essere usati dal tuo programma.
Ecco quindi che i risultati possono essere leggermente diversi, pur attenendosi entrambi i processori allo standard IEEE.
__________________
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 15:24   #3
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15840
ma quindi quando l'intel passa da 32 a 80 bit i 48 bit di differenza cosa fa li riempie a caso??

Adesso sul manuale del ppc con quanti bit lavora il coprocessor
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 15:49   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
ma quindi quando l'intel passa da 32 a 80 bit i 48 bit di differenza cosa fa li riempie a caso??

Adesso sul manuale del ppc con quanti bit lavora il coprocessor
Ma mica a caso dai.
C'e' una corrispondenza ovvia per ciascun float a 32bit e un float a 80bit. Non si perde nulla ne si deve inventare nulla.
La parte restante della mantissa viene riempita con tutti 0, e l'esponente pure. Ovviamente un float a 32bit puo' essere scritto a 80bit senza problemi o ambiguita'.

Diverso e' invece il troncamento da 80bit a 32bit, essendo che la corrispondenza e' necessariamente multipla. Ma per questo ci sono gli algoritmi preposti dallo IEEE per il troncamento.
__________________
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 15:54   #5
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
ma quindi quando l'intel passa da 32 a 80 bit i 48 bit di differenza cosa fa li riempie a caso??

Adesso sul manuale del ppc con quanti bit lavora il coprocessor
No, vengono usati per eliminare la propagazione degli errori derivante dall'aumento di precisone dovuto ad operazioni consecutive.

Oltre a quanto scritto da gugoXX e aggiungo....

A volte dipende anche dal compilatore e dai "default" di compilazione... e possono veraiare da versione a versione, e da macchina a macchina.
Nel senso che alcuni compilatori, sapendo che affronteranno operazioni sul float, operano internamente in doppia precisione (sempre per il discorso propagazione errore), oltre che su registri del processore anche sul salvataggio temporaneo del risultato in aree di memoria "double"... altri usano le estenzioni SS2 a 128bit, se disponibile... altri in modalita' "fast-float" mantenendo celle di memoria a 32bit, sempre.
(e molte opzioni sono forzabili all'atto della compilazione)

Tralascio la "machine accuracy", che e' diversa dalla precisione di rappresentazione IEEE, e che solitamente e' rivolta alle funzioni complesse (sqrt, pow, sin, cos... etc.)... ma bisognerebbe dare anche un occhiata all'accuratezza della "printf" dei 2 compilatori, o chi per lei.

Insomma i fattori possono essere diversi... sicuramente non e' il fatto che uno sia big-endian e l'altro little-endian.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 15:57   #6
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15840
Si in effetti ho detto una ca##ta, oggi sono fuso

Quindi alla fine intel carica i float a 32 bit in nel coprecessor a 80 bit fa i calcoli a 80 bit e poi un casting a 32 bit del risultato.

Il powerppc usando un coprecessor a 64 bit è meno preciso nei calcoli e lo scostamento deriva da questo.

Potresti dirmi dove hai trovato l'informazione che l'x86 usa un coprecessor a 80 bit??
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 16:01   #7
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15840
Quote:
Originariamente inviato da BrutPitt Guarda i messaggi
Tralascio la "machine accuracy", che e' diversa dalla precisione di rappresentazione IEEE, e che solitamente e' rivolta alle funzioni complesse (sqrt, pow, sin, cos... etc.)... ma bisognerebbe dare anche un occhiata all'accuratezza della "printf" dei 2 compilatori, o chi per lei.
Gli output li scrivo in binario e poi li converto in ascii con matlab quindi tra le due versioni in questa fase non possono esserci differenze.
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 16:22   #8
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
Gli output li scrivo in binario e poi li converto in ascii con matlab quindi tra le due versioni in questa fase non possono esserci differenze.
Allora una cosa in meno da controllare

Puoi vedere la rappresentazione interna dei registri FPU sul manuale Intel dell'IA32:
http://download.intel.com/design/pro...als/253665.pdf

Oppure graficamente anche qui:
http://www.sandpile.org/ia32/fp_old.htm
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 17:14   #9
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15840
Quote:
Originariamente inviato da BrutPitt Guarda i messaggi
Allora una cosa in meno da controllare

Puoi vedere la rappresentazione interna dei registri FPU sul manuale Intel dell'IA32:
http://download.intel.com/design/pro...als/253665.pdf

Oppure graficamente anche qui:
http://www.sandpile.org/ia32/fp_old.htm
Ottimo, grazie mille!!!! lunedì il mio capo sarà molto contento
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2009, 20:18   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da BrutPitt Guarda i messaggi
A volte dipende anche dal compilatore e dai "default" di compilazione... e possono veraiare da versione a versione, e da macchina a macchina.
Nel senso che alcuni compilatori, sapendo che affronteranno operazioni sul float, operano internamente in doppia precisione (sempre per il discorso propagazione errore), oltre che su registri del processore anche sul salvataggio temporaneo del risultato in aree di memoria "double"... altri usano le estenzioni SS2 a 128bit, se disponibile... altri in modalita' "fast-float" mantenendo celle di memoria a 32bit, sempre.
(e molte opzioni sono forzabili all'atto della compilazione)
Le SSE2 a 128 bit, però, operano sempre con double. Non ci sono ancora float a 128 bit.
Quote:
Insomma i fattori possono essere diversi... sicuramente non e' il fatto che uno sia big-endian e l'altro little-endian.
Concordo: questo non c'entra niente.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
Samsung Galaxy bloccati dopo l'aggiornam...
L'UE prolunga il periodo di test del pro...
Offerte Amazon di oggi: e-bike da 616€, ...
La missione cino-europea ESA Smile ha in...
Cisco sulle tracce dell’IA nei malware: ...
Nuovo Codice della strada: stop alla PEC...
Blue Origin Constellation Park: un nuovo...
E-bike da 615€ su Amazon: Bodywel F20PRO...
Windows 11 24H2, stop al supporto per Ho...
Gemini 4 Argon disponibile per tutti: co...
Sony avrebbe chiuso Overdrive, lo store ...
Abbiamo scattato con OPPO Find X10 Pro M...
Fino a 21 miliardi per i chip americani:...
Minions: Apple trasforma i Mac inattivi ...
Microsoft interrompe il supporto a Offic...
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: 17:51.


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