Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Pentu programatorii PHP mai batrani
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Subiectul anterior :: Subiectul următor  
Autor Mesaj
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Mar Apr 15, 2003 4:59 pm    Titlul subiectului: Pentu programatorii PHP mai batrani  

Cum convertesc eu un nr hexa intr-un double sau float in PHP.
adica cat o fi insemnand :
00 00 00 c0 10 a2 21 41.
sau
00 00 00 40 dc 01 24 41

Unde este functia aia in PHP ca de nu am cautat-o de mi s-a urat cu zile. Pana la urma cred ca trebuie sa fac eu algoritmul de conversie. L-am facut la liceu parca nu mai stiu sigur.
Sus  
killahbeez



Data înscrierii: 16/Apr/2003
Mesaje: 18

Trimis: Mie Apr 16, 2003 11:40 am    Titlul subiectului:  

echo sprintf("%d",0x000000c010a22141);
Sus  
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Mie Apr 16, 2003 4:11 pm    Titlul subiectului:  

Domnu killahbeez ia zi cat ai baut ca sa stiu daca-ti mai explic sau nu ?

Ia dute matale si testeaza-ti gogomania, si apoi vezi ce este DOUBLE.

Numarul hexa 00 00 00 c0 10 a2 21 41 ar trebui sa fie ceva de genul 12345.6789, adica cu virgula mai omule, ci nu intreg.

Merci pentru ca te-ai straduit.
Sus  
Dan Alexandru



Data înscrierii: 05/Apr/2003
Mesaje: 45

Trimis: Mie Apr 16, 2003 6:01 pm    Titlul subiectului:  

Uite o descriere a numereleor reale pe 32 de biti

For single precision (32-bit) floating-point numbers, 1 bit determines the sign (+ or -), 8 bits determine the exponent (bias 127), and the remaining bits (23) determine the mantissa (or fraction) with implicit leading 1 before the fractional part.

V = 1.M * 2(E-127)
V: value of number
E: exponent (range)
M: mantissa (precision)

Sign (1 bit) Exponent (8 bits) Mantissa (23 bits)
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Decimal (base 10) Number: 5.375

Convert to binary (base 2) representation:
4 + 1 + 0.25 + 0.125 =
(1 * 22) + (0 * 21) + (1 * 20) + (0 * 2-1) + (1 * 2-2) + (1 * 2-3) = 101.011

Prepare three parts of 32-bit IEEE floating-point format:
Sign: positive => 0
Exponent: 101.011 = 1.01011 * 22 => 2 + 127 (exponent bias) = 129 = 10000001
Mantissa: 1.01011 with first 1 and point (1.M) implicit => 01011

IEEE 32-bit: 0 10000001 01011000000000000000000
Hex: 40AC0000
Other Examples:

--------------------------------------------------------------------------------
0 00000000 00000000000000000000000 = Positive Zero
1 00000000 00000000000000000000000 = Negative Zero
0 11111111 00000000000000000000000 = Positive Infinity
1 11111111 00000000000000000000000 = Negative Infinity

1 10000111 00110001101000000000000
-1 * 2(135-127) * 1.00110001101 = -305.625

0 10000000 00000000000000000000000
+1 * 2(128-127) * 1.0 = 2

0 10000101 01101101101001110000000
+1 * 2(133-127) * 1.0110110110100111 = 91.4130859375

0 10000001 01011000000000000000000
+1 * 2(129-127) * 1.01011 = 5.375
--------------------------------------------------------------------------------

If the exponent is 11111111 and the mantissa is not zero, then the value is NaN (not a number).

For double precision (64-bit) floating-point numbers, 1 bit determines the sign (+ or -), 11 bits determine the exponent (bias 1023), and the remaining bits (52) determine the mantissa (or fraction) with implicit leading 1 before the fractional part. The conversion is similar to 32-bit, but more bits are used for the exponent and mantissa for greater range and precision.

Se poate face o functie de conversie din hexa in double.
Succes!
alex.
Sus  
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Joi Apr 17, 2003 10:18 am    Titlul subiectului:  

Multumesc Dan.

Am sapat pe internet mai mult si am gasit si eu o documentatie lafel ca ce ai dat tu mai sus. Mi-a fost lene sa caut caietul din clasa a IX-a sa vad pe unde naiba am scris ce ne-a predat profu de info despre reprezentarea numerelor binare.

Acum ma apuc de scris algoritmul. Frecatorie de biti ca doar asta-i programare adevarata.
Sus  
killahbeez



Data înscrierii: 16/Apr/2003
Mesaje: 18

Trimis: Joi Apr 17, 2003 1:08 pm    Titlul subiectului:  

Era foarte simplu de modificat in loc de %d pui %f.

echo sprintf("%f",0xaaa11111);

binenteles in limita float-ului.


Mai citeste si mai incearca, iar mai citeste...........
Sus  
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Joi Apr 17, 2003 1:47 pm    Titlul subiectului:  

Piece of cake

Gata si cu algoritmul, ca doar nu era mare filozofie. Cat despre killahbeez ce sa mai zic.

Bai fratilor daca am zis double asa ramane, pentru ca asa este formatul de fisier. In specificatii scrie ca este scris un double, si eu sa ma apuc sa citesc un float ca smecheru.

Rezolvarea este:
00 00 00 c0 10 a2 21 41 hexa = 524345.7241140429324293767168

Asta asa pentru cine nu are ce face si ma verifica! Si inca ceva ordinea este 41 21 a2 10 c0 00 00 00.


Multumesc moderatorului Dan Alexandru
Sus  
killahbeez



Data înscrierii: 16/Apr/2003
Mesaje: 18

Trimis: Joi Apr 17, 2003 2:25 pm    Titlul subiectului:  

You may also find some references to the type "double". Consider double the same as float, the two names exist only for historic reasons

din manualul de php
Sus  
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Joi Apr 17, 2003 3:40 pm    Titlul subiectului:  

Pana nu te lovesti cu capul de perete nu stii cat de tare este peretele. In viata este bine sa mai si verifici, si nu crede tot ceea ce ti se spune. Sa nu crezi ca PHP-ul este perfect si are tot ce-i trebuie.
Daca programezi mai mult cu timpul o sa vezi lipsurile PHP-ului.
Sus  
killahbeez



Data înscrierii: 16/Apr/2003
Mesaje: 18

Trimis: Joi Apr 17, 2003 4:23 pm    Titlul subiectului:  

Domn director, folosesc php-ul de multisor, si n-am intalnit o aberatie mai mare.

alt citat din manual
Floating point numbers (AKA "floats", "doubles" or "real numbers") can be specified using any of the following syntaxes:

Daca manualul nu este suficient pentru tine spune-mi, ca am sa vin si cu exemple, desi nu cred ca se merita, avand in vedere ca pornesti de la o aberatie.
Sus  
Dan Alexandru



Data înscrierii: 05/Apr/2003
Mesaje: 45

Trimis: Joi Apr 17, 2003 10:45 pm    Titlul subiectului:  

Adevarul este undeva la mijloc. Depinde de versiunea de php.
Paradoxal fiecare puteti aduce cate un contra exemplu.
Succes!
Alex. :D
Sus  
ass



Data înscrierii: 11/Apr/2003
Mesaje: 35

Trimis: Vin Apr 18, 2003 9:57 am    Titlul subiectului:  

Nu are rost sa ne luam la gargara aici. Important este ca am rezolvat problema, in mare parte si cu ajutorul forumului PHP Romania.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community