[PHP] Handmatige base_convert en E

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik probeer een base_convert te doen van een groot getal (119 nummers). Nou komt er daar bij een aantal to_base gewoon een string 0-en uit. Dat klopt uiteraard niet en ik denk dan ook dat de grootte van het getal niet helemaal goed wordt geconverteerd. Nu wil ik dat dus handmatig doen.

Ik heb de string met explode() opgedeeld in stukjes van 1 nummer. Nu wil ik dus in een loop per nummer deze vermenigvuldigen met pow(10, $i), dus naar base10. Per nummer wordt $i met 1 verhoogd, dus je krijgt overal het volgende idee:
3 * 10^0
2 * 10^1
6 * 10^2
0 * 10^3
1 * 10^4
etc. etc.

De uitkomsten van deze losse berekeningen zet ik in een array, welke ik daarna bij elkaar op wil tellen. Het probleem is, dat ik als uitkomst (wat ook logisch is) dit soort getallen krijg: 3E+013.

Deze wil ik niet in deze vorm, maar volledig uitschrijven. Ik heb abs() geprobeerd, aangezien dat het absolute getal weer zou moeten geven. Verder zie ik bij math op php.net geen soortgelijke functies staan, in php.ini wordt er met geen woord over gesproken, en als je zoekt naar "PHP large numbers E" op google krijg je van 100000 sites hun E-Mail adres :X

Is er een functie voor die dit omzet, of moet ik toch ergens de configuratie aanpassen?

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je werkt met floatingpoint getallen op zo'n moment, dan heb je de preciesie helemaal niet meer om het goed te doen.

Dat zou je op kunnen lossen met een eigen bigint-implementatie (een array van aaneensluitende integers bijhouden en bij overflow de boel in het "getalid + 1" ophogen) of bijvoorbeeld gebruik te maken van de bcmath implementatie in PHP.

[ Voor 5% gewijzigd door ACM op 10-06-2003 11:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

zoeken op "sceintific notation" levert waarschijnlijk meer relevante treffers op

Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
waarbij de zoekwoorden "scientific notation" waarschijnlijk NOG meer relevante zoekresultaten zullen opleveren :P

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

Verwijderd

Theguide schreef op 10 juni 2003 @ 11:28:
waarbij de zoekwoorden "scientific notation" waarschijnlijk NOG meer relevante zoekresultaten zullen opleveren :P
das inderdaad wel waarschijnlijk ;)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Die E is trwouwens hetzelfde als op je reken machiene :0

3E+013 = 3 x 1013

Daarnaast ben ik erg benieuwd hou jij wilt gaan 'baseconverten' per digit ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Dat is toch geen probleem? Dat heb ik hier boven al gezegd. Het probleem is alleen dattie niet met zeer grote getallen om kan gaan en dan dus over gaat naar E-notatie. Ik vind overigens wel meer als ik naar 'scientific notation' zoek, helaas wel allemaal van mensen die met hetzelfde probleem zitten waar niemand een antwoord op heeft :P

---

De reden dat ik het zo doe is, omdat het de volgende twee getallen zijn:
012117031010034005021007114026034010033116007111105124000000114034101032124032117026013111007024032111014101033014021026
en
4920776f6e6465722077686174207468652068656c6c2069276d20646f696e6720696e2068657265
De eerste is octaal en de tweede hexadecimaal, deze wil ik beiden naar base 10 converten. Het is een puzzel, waarbij dit de enige gegevens zijn. Ik vermoed dat ze, bij het converteren naar een andere base op een gegeven moment op hetzelfde getal uitkomen, wat dan de oplossing zou moeten zijn...

Die oplossing zal ongetwijfeld gewoon voluit geschreven moeten worden en niet met E-waarden. Vandaar dat ik het nu maar handmatig probeer te doen. En nee, ik wil alsjeblieft niet de goede oplossing hier van iemand, ik wil 'm zelf oplossen :) alleen dus dat converteren werkt niet helemaal lekker :P

[ Voor 61% gewijzigd door Kaastosti op 10-06-2003 12:31 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1