[C++] Quoziente e Resto

utente__medio11
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?!

Risposte
utente__medio11
Ho fatto qualche ricerca, e com'era prevedibile esiste una funzione [inline]std::div()[/inline] che ritorna quoziente e resto mediante un'apposita struct.

Inoltre ho letto che molti compilatori in casi come il seguente
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 [inline]/[/inline] e [inline]%[/inline]?

apatriarca
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.

utente__medio11
Quindi in definitiva la cosa migliore rimane implementare qualcosa come [inline]std::div()[/inline] e lasciare all'utente la possibilità di sfruttare o meno tale ottimizzazione?

apatriarca
Nel caso di una libreria per big int la soluzione corretta è certamente quella di avere una funzione che restituisce entrambi i valori.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.