- Messaggi
- 2,341
- Reazioni
- 1,931
- Punteggio
- 134
Vabbè, al di là di come sia implementata, sqrt() opera su numeri in virgola mobile, a me invece interessa operare con gli interi, anche perché poi ho intenzione di aggiungere la radice quadrata alla mia libreria sui big_int.
Lo so che se la complessità è quella non si possono fare miracoli, semplicemente sono rimasto stupito da una differenza così marcata; la richiesta poi su eventuali margini di miglioramento della mia funzione era una questione a parte, non pretendo certo di renderla cinque volte più
veloce!
Però potresti usare per esempio le intrinsics e fare una terza funzione usando direttamente le istruzioni che mette a disposizione l'architettura (o con assembly inline). Magari scopri che si accosta molto a quella di libreria.
Eh sì, se c'è hardware dedicato c'è poco da fare!
Comunque a tal proposito qualche tempo fa mi ritrovai a leggere qualcosa in rete circa il fatto che la divisione in virgola mobile fosse più veloce di quella intera, e da quello che ho capito la risposta è che non è vero in assoluto e dipende dall'hardware, anche se la maggior parte delle cpu commerciali tendono a privilegiare alcune operazioni in virgola mobile.
Mi sa che ti riferisci tipo a questo: https://stackoverflow.com/a/55833042
Non sono per niente convinto però in merito alla sua affermazione dove parla di C e C++, riguardo alla promozione dei numeri a 8bit in int.
Andrebbe visto caso per caso, compilatore, ottimizzazioni del compilatore e situazioni... perchè l'architettura prevede l'utilizzo di operandi più piccoli di un int.
Questo secondo me può interessarti comunque: https://forum.nasm.us/index.php?topic=3863.0
Me lo salvo per leggerleo con calma.