Avatar billede Mik2000 Professor
03. juli 2013 - 01:24 Der er 10 kommentarer og
1 løsning

microtime - problemer med tal

Hej

Når jeg får tingene i microtime og ændre dem til et tal, så får jeg et tal som f.eks.:
1372807260.61037707328796386718750

Hver gang jeg henter tallene eller arbejder med dem eller beregner noget med dem, laver den dem om til f.eks. 5.0067901611328E-6

Da jeg har brug for at se forskellene i de sidste tal (hvor hurtigt sider loader for eksempel), duer det ikke den ændre dem.

Så hvordan sikrer man at når man gemmer og bruger tallene i beregninger, så beholder den alle decimalerne?
Avatar billede arne_v Ekspert
03. juli 2013 - 01:27 #1

1372807260.61037707328796386718750
        0.0000050067901611328


Har da naesten samme antal decimaler.
Avatar billede arne_v Ekspert
03. juli 2013 - 01:28 #2
Og hvis du vil maale tidsintervaller mindre end 0.001 sekund, saa kan du ligesaa godt bruge mt_rand til at generere dine tilfaeldige tal.
Avatar billede Mik2000 Professor
03. juli 2013 - 11:22 #3
Jeg skal måle hvor hurtigt noget kode eksekveres så derfor skal jeg ned i de små tal.

Men kan jeg ikke få den til at skrive 0.0000050067901611328 i stedet for 5.0067901611328E-6 hvis de tal betyder det samme?
Avatar billede arne_v Ekspert
03. juli 2013 - 14:54 #4
Sagtens.

Demo:

<?php
$x = 0.0000050067901611328;
echo $x . "\r\n";
echo sprintf('%.10f', $x) . "\r\n";
echo number_format($x, 10) . "\r\n";
?
Avatar billede arne_v Ekspert
03. juli 2013 - 14:59 #5
Men skal vi lige repetere hvordan flerbruger systemer virker.

Dit script koerer ikke noedvendigvis uafbrudt fra start til slut. CPU'en (core'n) kan sagtens bliver overtaget af en anden process/traad mens det koerer.

Saa det du maaler er:

den CPU tid din kode bruger + N * T

hvor N er antal processer/traade der afbryder scriptets eksekvering (vel typisk 0-2 paa et ikke travlt system) og T er den tid der afbrydes (ofte 1-10 ms).

hvad er pointen i at maale noget med 10 decimaler hvor der indgaar 0-2 * 0.001-0.010 ?
Avatar billede Mik2000 Professor
03. juli 2013 - 16:21 #6
Hej
Det kan jeg til dels godt følge.

I det her tilfælde er det til en skoleopgave, så har en server til rådighed, hvor der som udgangspunkt ikke kører noget som helst andet. Serveren er også overdimensioneret, og installeret med Linux.

Men jeg lytter selvfølgelig gerne til alle råd der måtte være og hvad man skal tage højde for, for har ingen erfaring med at måle tid på de ting før.

Så hvordan vil du mene man nemmeste måler hvor lang tid det tager, og hvordan vil du mene man får de mest præcise målinger?
Avatar billede arne_v Ekspert
03. juli 2013 - 16:40 #7
Et moderne OS koerer et hav af processer for alt muligt selvom der "ikke koerer noget".

Normal laver man en ekstra loekke omkring det man vil maale og lade den loekke iterere det antal gang der skal til for at faa den samlede tid op paa et antal sekunder og saa dividerer man tiden med antal gennemloeb.
Avatar billede Mik2000 Professor
03. juli 2013 - 17:02 #8
Ja kender jeg godt lidt, men jeg har en stor computer til rådighed med i7, 16 gb ram mv., så burde være et minimum.

Det er også det jeg pt. har gjort
Men jeg gemmer både de enkelte gennemløb og tider, og laver en max, en min og gennemsnitstid.
Men der skal jo være rigtig meget kode, hvis ikke jeg skal godt ned i kommatallet for at se forskellen.
Avatar billede Mik2000 Professor
11. juli 2013 - 15:23 #9
Men point til dig Arne hvis du lægger et svar :)
Avatar billede arne_v Ekspert
11. juli 2013 - 16:20 #10
svar
Avatar billede Mik2000 Professor
11. juli 2013 - 21:51 #11
Tak for svar endnu en gang :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester