The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > UNIX for Advanced & Ekspertsøgning Brugere
.
google unix.com



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.

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 07-17-2008
mohan705 mohan705 is offline
Registreret Bruger
  
 

Join Date: Feb 2007
Stillinger: 134
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
  #2 (permalink)  
Old 07-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.807
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.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 09:57 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0