Sì, lo so che quell’espressione è sbagliata; volevo solo rendere l’idea; in realtà non ci sono problemi a mettere numeratore e denominatore dello scalamento in due registri lunghezza e usare i registri invece dei valori espliciti.
IN vece non sono d’accordo sul fatto che eseguendo le operazioni direttamente sui registri si ottenga lo stesso risultato. Infatti il prodotto parziale deve essere a 32 bit se si usano le operazioni primitive di TeX, mentre con \dimexpr si ha un valore intermedio a 64 bit; per cui si riduce a metà il pericolo dell’overflow. Inoltre \dimexpr esegue direttamente l’arrotondamento invece del troncamanto, il che, se vogliamo è solo estetica.
Per quel che riguarda i tempi di esecuzione di \dimexpr non sono certo che siano maggiori di quelli dei comandi tradizionali, in quanto sono direttamente programmati nell’eseguibile come operazioni di long integer, almeno la moltiplicazione. Detto questo ribadisco che non sono certo perché non ho letto il volume TeX the program, dove per altro Knuth non ha descritto il codice di eTeX. Non ho nemmeno letto il codice sorgente delle “modifiche” di eTeX da inserire durante la compilazione dell’eseguibile (che per altro a noi utenti arriva già fatta con l’installazione prescelta — molti anni fa mettevo le mani sul codice Pascal e ricompilavo il tutto sul VAX su cui avevo accesso come amministratore, ma non mi sogno più di fare cose del genere.
Per lo stesso motivo, @Liverpool; non sono in grado di spiegarti come nel TeX tradizionale di Knuth i registri interi che contengono il numero di scaled points vengano gestiti per moltiplicare il loro contenuto per quantità fratte; non son un mago della programmazione assembler, anzi, ma ho lavorato in questo campo in passato e non conosco altre vie di spezzare le operazioni fra parte intera e parte fratta del fattore fratto (be’, io a suo tempo sarei passato per una conversino in reale, anche se facendo ciò avrei avuto una perdita di bit significativi con lunghezze grandicelle; con gli scaled points interi arrivi a 2^{30}-1, mentre con i floaitng point arrivi fino a 2^(25)-1 bit significativi contando anche il primo bit nascosto che è sempre un 1). Se hai mai programmato a bassissimo livello, praticamente assembler o linguaggio macchina, sai di che cosa sto parlando. Ma anche senza questa esperienza capisci da solo che scalare per una quantità fratta un numero intero richiede accrcochi strani se si vuole rimanere nel dominio dei numeri interi.
Se qualcuno più volonterosi di quanto io non sia, volesse leggersi il secondo libro della Millennium Edition di Knuth, il testo che descrive il programma sorgente di TeX, e ci spiega in dettaglio come vengano eseguiti questi scalamenti restando nel dominio degli interi è il benvenuto, almeno da parte mia.