[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] C og regex



On Sun, Mar 14, 2004 at 11:04:28AM +0100, Christian Nielsen wrote:
> Jeg er ved at skrive progam i C, som begreger viskositer. Jeg er kommet
> dertil, hvor progammet men mine inddata mv. skal valideres. Hvad har jeg
> af muligheder? Er programmerer normalt i PERL, så C er noget fremmed.
Hvis du bare vil bruge regex's, så skulle man 3 regexec gerne give dig
nogle hints.

> Desværre regner PERL forkert, hvis man lægger mange små tal sammen.
Nu er det ikke fordi jeg kender specielt meget til Perl, men det lyder
som om at du er rendt ind i et problem, som du også vil støde på i C.
Nemlig at når man forsøger at afbillede et uendeligt antal tal, med et
endeligt antal muligheder, så kan man ikke få alle tal.

Lidt mere konkret: Normalt regner man enten med floats eller doubles
(for nu at bruge C navnene) når man regner med flydende komma tal. Hvis
du bruger float benytter du 32 bits, og 64 bits hvis det er en double.
Dvs. en float kan maks representere 2 ^ 32 ~ 4 mia. forskellige tal. For
en double er det så 2 ^ 64 ~ 10^19 forskellige tal. Dvs. betragteligt
flere.

Der så sker når du læser et tal ind som en double eller float, er at
computeren afrunder til det nærmeste den kan representere.  Tal som 2,
0.25 kan representeres precist, mens f.eks. 0.2 ikke kan.

Det betyder også at man er nødt til at tage nogle forbehold når man
regner med den slags tal. Hvis du f.eks. vil lægge en lang liste af tal
sammen, som varierer en del i størrelse, så vil du få bedre precision på
dine udregninger hvis du sorterer listen først, og starter med at lægge
de mindste tal sammen først.

Nu ved jeg ikke om Perl bruger hvad der svarer til float eller doubles,
men hvis det bruger doubles, så vil du have samme problemer i C.

-- 
/-----------------------------------------------------\
| Klaus S. Madsen      | "Failure is not an option... |
| ICQ: 45400164        |  It comes bundled with your  |
| www.hjernemadsen.org |  Microsoft products!"        |
\-----------------------------------------------------/


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:43 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *