Re: Rapidità di esecuzione dello scalamento di una lunghezza

#80686
OldClaudio
Partecipante
    Up
    0
    Down
    ::

    Ciao e bentornato

    Grazie epr il bentornato; certo sono tornato un poco sul forum e lo faccio quando riesco a trovere una free WiFi. In realtà sono a circa 17 000 km di distanza nello stato di Vittoria, in Australia:smile:

    Tornado al tuo problema Lo scalamanto di una lunghezza andrebbe fatto nel modo migliore sia per precisione, sia per velocità ricorrendo alle estensioni di eTeX che da diversi anni sono incorporate dentro ogni motore di composizione moderno, pdftex, xetex,luatex e forse anche altri. Questi sono i nomi dei veri programmi di composizione che insieme al file di formato latex.ltx formano pdflatex, xelatex, lualatex.

    Allora per scalare di un fattore 0.25 ovvero 1/4 hai queste possibilità:`\dimen0= \dimexpr \dimen0 * 0.25pt / 1pt \relax`oppure` \dimen0 = \dimexpr \dimen0 * 1pt / 4pt \relax`

    I due \relax sono facoltativi se non ci sono ambiguità con quel che segue; le dimensioni in puti tipografic possono venire rappresentate come multipli di \p@.

    Il bello della \dimexpr è che la prima moltiplicazione viene eseguita in un registro da 64 bit (invece della lunghezza normale di 32 bit), quidi senza troncamenti né overflow. La divisione viene eseguite con il numeratore intero a doppia precisione e arrotondato, non troncato come succede con \divide. Sono due operazioni eseguite direttamente nei registri della CPU, quindi richiedono il minimo tempo macchina possibile. Il manuale di eTeX raccomanda di eseguire le operazioni di scalamento in questo modo. texdoc etex è illuminante a questo proposito.

    Ciao
    Claudio

    Go to top