[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: [CPROG] Laaangsom snprintf()



Morten Sylvest Olsen wrote:
> 
> Egon Andersen, Talura <sslug@sslug> wrote:
> : Hej,
> 
> : Jeg har et problem med hastigheden af snprintf().
> 
> : I et real-tids program har jeg et sted følgende program linie:
> 
> : length = snprintf(tmpbuf, bufsize, "%-.*LE", fractional_digits,
> : RealValue);
> 
> : Ovenstående linie overskygger simpelthen alt andet i programmet, mht.
> : tidsforbrug og der foregår faktisk ganske meget andet!
> 
> : Jeg har mål forbruget til ca. 20000 clock-cykler, hvilket jeg synes er
> : ekstremt meget.
> 
> Hmm, måske, måske ikke. Men tilsyneladende er det et 128bit long double floating point
> tal du skriver ud? Det har nok en stor andel af skylden. Hvis der skal
> laves en rigtig effektiv udskriving kunne du måske hacke noget sammen
> vha. nogle multimedia SIMD instruktioner. Det er jo lidt afhængig hvilken
> processor der sidder på dit (indlejrede??) system. Hvis 20000 clockcykler
> er et problem så burde du måske bruge fixed-point arithmetic, men det
> afhænger self. af hvad du gør med tallene.
> 
> Jeg kender ikke lige på stående fod algoritmer smartere end divide/modulus
> methoden.
> 
> Mvh Morten
> --
Nu er det på en Athlon, så long double er 80 bit.
Du er dog måske inde på noget af det endnu mere besynderlige, nemlig det
at hvis jeg type-cast'er til double og fjerner 'L', så går det 21 gange
hurtigere!!!
Det synes jeg er endnu mere besynderligt, da processoren netop internt
opererer med 80 bit i alle floating point beregninger.
Der må simpelthen være nogle numeriske algoritmer, der går helt grassat,
når præcisionen skal være så høj, at der skal tages hensyn til
afrundingsfejl. Noget siger mig, at log, exp og pow ikke er indbygget i
processoren :-)

Jeg kan ikke bare skifte til fixed-point, da det faktisk ikke er mig der
bestemmer hvilken data type der anvendes. Jeg skal blot være istand til
at konvertere en hvilken som helst data type til noget så tåbeligt som
XML. ('tåbeligt' skal forstås i en informations teoretisk sammenhæng.)

/Egon


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 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] *