Re: Eliminare pt dall’espansione di \the

#76077
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Allora con i comandi primitivi di TeX tradizionale si ottengono cose strane, e il risultato è corretto ().00002) ma manca lo scalamnento fra punti e scaled points, cosa che ha scoperto da solo
    con \dimexpr ti sei dimenticato di seguire le indicazioni che ti avevo dato, cioè di eseguire l’operazione a/c facendo a*b/c con b pari a un punto. Il codice
    `\documentclass{article}

    \newdimen\numer
    \newdimen\denom
    \newdimen\quoz

    \newcount\Nnumer
    \newcount\Ndenom
    \newcount\Nquoz

    \makeatletter
    \let\unpunto\p@

    \begin{document}
    \numer=150pt
    \denom=150pt

    \Nnumer=\numer \Ndenom\denom \Nquoz=\Nnumer
    \divide\Nquoz by\Ndenom \quoz=\Nquoz\unpunto
    \the \quoz

    \vspace{2\baselineskip}

    \the\dimexpr\numer*\unpunto/\denom\relax% -> 0.00002pt invece di 1pt
    \end{document}`
    scritto volutamente in modo ridondante, mostra esattamente quello che succede; come vedi in entrambi i casi si moltiplica per \unpunto, ma nel caso di \dimexpr non si va in overflow, mentre se usi i vecchi comandi, devi stare attento ad eseguire la moltiplicazione sul risultato finale, perché potresti andare in overflow, non sul prodotto intermedio, e così facendo potresti perdere moltissima precisione.

    Ora il metodo di \dimexpr serve benissimo per scrivere macro in file .sty, dove non hai bisogno di eseguire l’equivalenza di \unpunto con \p@; l’operazione è velocissima perché viene eseguita dentro i registri della cpu; pdfmath risolve invece tutto quanto ricorrendo a macro, ai loro sviluppi e compagnia bella. I tempi di esecuzione di una operazione come questa potrebbero crescere a dismisura, ma anche moltiplicando per 1000 pochi nanosecondi, si ottengono pochi microsecondi, il che ai tempi nostri vuol dire tempi trascurabili; con macchine vecchiotte (io ho ancora un desktop che gira con un clock di 30MHz, non di 3GHz come le macchine moderne) la differenza si sente eccome!
    Siccome tu usi macchine moderne, capisco che tu ti senta più a tuo agio con pgfmath, e l’aumento di cpu time per te sia trascurabile.
    Ciao
    Claudio

    Go to top