Hei,
Haluaisin selvittää, kauanko palvelinkoneeltani kestää kertoman laskeminen esimerkiksi miljoonaan tai kahteen miljoonaan.
Ongelmaksi muodostuu kuitenkin PHP:n merkkirajoitus ja se että php merkitsee liian pitkät luvut näin: 6.2044840173324E+23
Miten saisin kierrettyä tuon merkkirajoituksen ja aloittamaan kaavan 1000000!
laskemisen? Pitäisikö tulos jakaa useampiin merkkijonoihin?
Olen kokeillut tätä koodia, mutta silläkin suurin arvo on 170!
ja suuremmissa kuin 170
koodi tulostaa INF
.
Kiitos vastauksista.
Eräs vaihtoehto on ohjelmoida algoritmi, joka käsittelee lukuja merkkijonoina. Silloin lukualue ei pääse loppumaan kesken...
Voit myös käyttää jotain valmista pitkien lukujen kirjastoa. Pari vaihtoehtoa mainitaan PHP:n ohjeissa.
Metabolix kirjoitti:
Voit myös käyttää jotain valmista pitkien lukujen kirjastoa. Pari vaihtoehtoa mainitaan PHP:n ohjeissa.
Toki tuolla pääsee helpolla, mutta tuollaisen algoritmin tekeminen on ainakin opettavaista...
Toni: Opettaahan se ainakin sen, ettei aina tarvitse keksiä pyörää uudelleen :)
Kiitoksia vastauksista. Mitähän näistä funktioista pitäisi käyttää?
EDIT:Sain ongelman ratkaistua.Kiitos!
EDIT2:Nyt tuli eteen toinen ongelma : jos yritän selvittää liian ison luvun kertomaa, esimerkiksi miljoonan kertomaa, sivun lataus kaatuu virheeseen 500. Miten tämän voi estää ?
Lebe80 kirjoitti:
Opettaahan se ainakin sen, ettei aina tarvitse keksiä pyörää uudelleen :)
Minusta se ainakin on ihan varteenotettavaa tietotaito, että tietää, miten joku asia toimii, eikä vain aina yhdistä valmiita palikoita yhteen. Toki nykypäivän ohjelmointi ja ohjelmistokehitys on hyvin pitkälti edellä mainitun kaltasta, mutta joskus voi tulla se tilanne vastaan, ettei sitä valmista ratkaisua olekaan saatavilla ja mielestäni juuri tälläinen itse tekeminen valmeentaa näitä tilanteita varten.
Olli kirjoitti:
sivun lataus kaatuu virheeseen 500
Tuleeko palvelimen virhelokiin jokin viesti?
Jos lukualue loppuu kesken ja likimääräinen aika kelpaa, voit mitata pienellä testillä, kuinka kauan lukujen A ja B tulo lasketaan, missä A on n-numeroinen luku ja B m-numeroinen. Sitten voit valita algoritmin ja katsoa, montako kertolaskua sinun tarvitsee suorittaa laskeaksesi kertoman. Aikavaativuus on melko varmasti analysoitu julkaisussa
Peter Borwein. "On the Complexity of Calculating Factorials". Journal of Algorithms 6, 376–380 (1985).
En ole varma, mikä on nopein tapa laskea mielivaltaisia kertolaskuja, mutta isojen lukujen kertolasku on asymptoottisesti nopeinta tehdä Fürerin algoritmilla
Metabolix kirjoitti:
Olli kirjoitti:
sivun lataus kaatuu virheeseen 500
Tuleeko palvelimen virhelokiin jokin viesti?
Mistä sen palvelimen virhelokin saa oikein esille ?
tuossa palveliessa oni jotakin vikana koska se ei näytä virheilmoituksia, vain aina ERROR 500
No se riippuu tietenkin palvelinkoneestasi. Minulla lokitiedosto on /var/log/lighttpd/error.log.
Ok. Haluaisin että ne virheet näkyisi suoraan näkyville web-selaimesa.Miten ne otetaan käyttöön ?
PHP:n asetuksista.
Google: how to enable php errors
edit:
Nuo HTTP-errorit onkin sitten web-serverin asetuksista. Esim. Apachen httpd.conf.
Aihe on jo aika vanha, joten et voi enää vastata siihen.