Discussioni su argomenti di Informatica
28/12/2021, 12:40
Ciao, riflettendo sull'ottimizzazione di una libreria sui "big int" da me scritta, mi sono focalizzato sul fatto che la funzione di divisione (che sfrutta più o meno l'algoritmo della classica divisione in colonna insegnata a scuola) calcola contemporaneamente sia il quoziente che il resto, per poi ritornare l'uno o l'altro in base alla richiesta; quindi se per uno stesso dividendo e divisore mi servono sia quoziente che resto, dovrò eseguire la funzione due volte.
Detto ciò, prima di cimentarmi in soluzioni fantasiose, mi chiedevo se qualcosa di simile avviene anche per la divisione intera nativa e nel caso come viene gestito il tutto?!
29/12/2021, 09:30
Ho fatto qualche ricerca, e com'era prevedibile esiste una funzione
std::div()
che ritorna quoziente e resto mediante un'apposita struct.
Inoltre ho letto che molti compilatori in casi come il seguente
- Codice:
int q = a / b;
int r = a % b
sono in grado di ottimizzare il tutto eseguendo una sola divisione.
A tal proposito le due istruzioni devono essere per forza consecutive? Questa ottimizzazione vale solo per la divisione intera nativa o anche in presenza di overload degli operatori
/
e
%
?
31/12/2021, 19:15
Ogni compilatore si comporta in modo differente e lo stesso compilatore può avere comportamenti differenti in base alla versione e alle opzioni usate per compilare.
01/01/2022, 13:31
Quindi in definitiva la cosa migliore rimane implementare qualcosa come std::div()
e lasciare all'utente la possibilità di sfruttare o meno tale ottimizzazione?
01/01/2022, 14:31
Nel caso di una libreria per big int la soluzione corretta è certamente quella di avere una funzione che restituisce entrambi i valori.
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.