PDA

View Full Version : [C] floating point


white05
24-11-2007, 13:39
*Generando in modo random i bit di una variabile double, determinare il corrispondente oggetto float del SA Float P Std.*

Il mio problema non è, ovviamente, generare 64 bit in modo random ma non ho capito come si trova il corrispondente float. In realtà vorrei anche capire la teoria di questa cosa, ho provato sui miei manuali di c ma oltre a descrivere semplicemente il double come numero a 64 bit e il float a 32 bit non dicono altro.
Voi ne sapete di più? e conoscete anche un buon manuale da scaricare da dove studiare questa parte?
Grazie

white05
25-11-2007, 13:37
vi prego non mi dite che è un argomento che nessuno conosce!!! :cry:

banryu79
25-11-2007, 14:18
Per sapere come rappresentare un float a livello di bit devi conoscere lo standard con cui sono codificati.

Cmq bastava fare una ricerca con la funzione "cerca" del forum e inserire come keyword "float" cercando solo nel Forum di Programmazione.
Tra i thread trovati ti segnalo questo che potrebbe interessarti:
-> [C] Rappresentazione di un float (http://www.hwupgrade.it/forum/showthread.php?t=1463062&highlight=float)

Da cui puoi ricavare questo link che porta alla pagina di Wikipedia dedicata allo -> standard IEEE 754-1985 (http://en.wikipedia.org/wiki/IEEE_754)

Spero sia quello che cercavi :D

white05
25-11-2007, 14:53
ti ringrazio ma il mio problema non è che non so rappresentare un float, ma non so fare il passaggio dai 64 bit di un double al float rispettivo visto che dovrebbe averne 32 di bit... è questo che non ho capito!

andbin
25-11-2007, 15:10
ma non so fare il passaggio dai 64 bit di un double al floatBasta fare un cast: float f = (float) un_double;
Se non è questo che intendi ... allora non ho capito cosa devi fare ...

banryu79
25-11-2007, 15:13
Ok, non avevo capito bene il problema :D , purtroppo in questo caso non so come aiutarti...

@EDIT: Andbin, temo che white05 lo debba implementare lui, il casting, se non ho capito male...

andbin
25-11-2007, 15:30
@EDIT: Andbin, temo che white05 lo debba implementare lui, il casting, se non ho capito male...Sembrava troppo semplice il cast ...... ;)

Quindi tu dici che lui deve estrarre le 3 componenti (segno/esponente/mantissa) dal double e poi comporre il float applicando le dovute modifiche ai campi??? Per farlo è possibilissimo .... c'è solo da stare attenti alle differenze tra i due formati. Mi riferisco ad esempio alla dimensione dei campi, al bias dell'esponente e al 1 esplicito nel double.

white05
25-11-2007, 15:45
praticamente da quello che leggo nel testo dell'esercizio che ho postato nel primo post, io devo generare 64 bit random di un double, e da questi 64 bit risalire al float corrispondente.

ora mi chiedo due cose:

1) generare 64 bit random di un double implica qualche cosa di particolare visto che specifica che sono di un double o è sufficiente che con rand() genero una sequenza casuale di 64 bit?

2) una volta ottenuti questi 64 bit come faccio con questi a costruire il float corrispondente?

ecco spero sia più chiaro ora. Grazie ad entrambi :)