![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| UNIX for Advanced & Ekspertsøgning Brugere Expert-til-ekspert. Lær avancerede UNIX, UNIX-kommandoer, Linux operativsystemer, systemadministration, programmering, Shell, Shell Scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD. |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
awk hjælpe
Hej
I min fil der er 4 kolonner med beløb områder, men jeg får forskellige beløb via nedenstående ens awk-F "|" '(a + \u003d $ 1 + $ 2 + $ 3 + $ 4) END (printf ( "% f \ n", a))' fil 1123337200682,226562 awk 'BEGIN (FS \u003d OFS \u003d"|"} (for (i \u003d 1; i <\u003d NF; i + +) (a + \u003d $ i; n + +)) END (printf ( "% f \ n", a))' fil 1123337200684,453613 Tak, MR |
|
||||
|
Velkommen til den vidunderlige verden af floating point aritmetik.
First off, awk bruger dobbelt præcision floating point til intern repræsentation af numre. Den normale grænse for dobbelt presision er 15 cifre. Du udskriver 19 - Har du brug for dem alle? Du kan tjekke dit system, kan det give mere end 15. Dernæst er den måde, awk, der udfører dem FP tilføjer er muligvis årsagen til problemet. For $ 1 + $ 2 ..... det sandsynligvis er midlertidig lagring af værdier og få mellemliggende beløb. Den anden løkke sandsynligvis ikke en simpel ud, med kun en temp opbevaring variabel. Slop i gengivelsen af tal stiger du gå gennem mellemliggende værdier og beløb. Jo flere mellemliggende værdier, jo mere eventuel fejl. Det andet spørgsmål er, at awk er nødt til at kalde atof for hvert nummer hedder det i. Det faktiske antal er lagret i hukommelsen, kan ikke være præcis representable i FM, og da du arbejder i nærheden af grænsen for dobbelt præcision, et par tusinde af de små fejl repræsenterer en ændring på rækkefølgen af et helt tal. Det er ikke skyld awk, det har at gøre med den måde, FP numre arbejde. Du kan prøve at skrive en bc script, det generelt går bedre på store tal. Du kan også prøve en simpel C app med lange dobbelt datatyper. |
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|