[PHP] 64-bit operators/vars?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Zijn de PHP vars 32-bit, 64-bit of afhankelijk van de architectuur waarop de 'interpreter' draait?
Ik heb namelijk een script waarin ik een bigint krijg van MySQL en als ik direct printf doe wordt de 64-bit waarde afgedrukt, als ik /= 1024 gebruik wordt ook de 64-bit waarde afgedrukt, maar als ik >>= 1024 gebruik wordt 2^31-1 afgedrukt.
Het lijkt er dus op dat PHP wel iets van 64-bit kent.
Maar is er geen optie om 64-bit vars te gebruiken (op elk systeem, onafhankelijk van architectuur)?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

[nohtml]
>>= 1024
Je bedoelt waarschijnlijk >>= 10? :)
Maar anyway
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Een vriend van me heeft het ontbreken van grote integers opgelost door ze als string te declareren, en dan berekeningen te doen op die strings. Is natuurlijk een heel stuk trager, maar volgens mij wel een van de weinige mogelijkheden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

OlafvdSpek schreef op 13 september 2004 @ 22:50:
Maar is er geen optie om 64-bit vars te gebruiken (op elk systeem, onafhankelijk van architectuur)?
Nee. PHP is compleet architectuur-afhankelijk. Het heeft wel 64-bit floats (die kennen een 53-bit precisie) en waarschijnlijk komen je MySQL waarden daarin terecht (misschien afgerond, afhankelijk van de daadwerkelijke grootte van de getallen). Bij gebruik van de >> operator wordt dit geforceerd naar integer, die 32-bits is op 32-bits systemen.

Er zijn wel extensies in PHP om te rekenen met getallen van arbitraire grootte.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

NMe84 schreef op 13 september 2004 @ 23:02:
Een vriend van me heeft het ontbreken van grote integers opgelost door ze als string te declareren, en dan berekeningen te doen op die strings. Is natuurlijk een heel stuk trager, maar volgens mij wel een van de weinige mogelijkheden.
Mja dan zou ik eerder een array van 16 bit words gebruiken. Ik neem aan dat hij dan gewoon de 10base notatie gebruikt in de strings (oftewel zoals wij mensen getallen noteren)?

sangdrax: een double heeft een 54 bits precisie ;)

[ Voor 71% gewijzigd door .oisyn op 13-09-2004 23:10 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

NMe84 schreef op 13 september 2004 @ 23:02:
Een vriend van me heeft het ontbreken van grote integers opgelost door ze als string te declareren, en dan berekeningen te doen op die strings. Is natuurlijk een heel stuk trager, maar volgens mij wel een van de weinige mogelijkheden.
Daarbij moest hij waarschijnlijk wel z'n eigen rekenfuncties schrijven? Bij het gebruik van wiskundige operatoren gaat de berekening via floats, hoe vaak je zelf ook cast.

Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op 13 september 2004 @ 23:08:
sangdrax: een double heeft een 54 bits precisie ;)
Hmm.. http://www.ee.unb.ca/tervo/ee6373/IEEE64.htm worden gebruikt door PHP. Die hebben een 53-bit mantissa (er worden er 52 opgeslagen). Hoe krijg je daar een oneven (dus je laagste bit is 1) 54-bits getal in?

Ik moet toegeven dat ik dit nu ad-hoc heb opgezocht, maar ik zie niet hoe je die 54-bit precisie krijgt?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Argh je hebt gelijk, ik dacht dat er maar 10 exponent bits waren in een double, maar dat is 11 (waardoor er natuurlijk maar 52 mantissa bits overblijven). Mijn excuses :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
.oisyn schreef op 13 september 2004 @ 22:57:
Je bedoelt waarschijnlijk >>= 10? :)
Uiteraard.
Maar anyway
[...]
Pff, lekker is dat. 8)7

[ Voor 7% gewijzigd door Olaf van der Spek op 13-09-2004 23:24 ]

Pagina: 1