Il confronto tra numeri in virgola mobile richiede (considerevolmente) tempo più lungo rispetto al confronto dei numeri interi in C?
Ho appena scritto un programma C di heap sort per ordinare i numeri in virgola mobile.
Sono su ubuntu 14.04 e ho usato il comando time
per controllare il tempo impiegato da questo programma per l'ordinamento di numeri casuali 50, 5000 e 50000 e poi ho appena cambiato tutto double
in int
e di nuovo il tempo controllato per 50, 5000 e 5000 numeri e statistiche sono i seguenti:
$ time ./heap 50 < input.txt
real 0m0.003s
user 0m0.001s
sys 0m0.002s
$ time ./temp 50 < input.txt
real 0m0.003s
user 0m0.001s
sys 0m0.002s
$ time ./heap 5000 < input.txt
real 0m0.008s
user 0m0.007s
sys 0m0.002s
$ time ./temp 5000 < input.txt
real 0m0.005s
user 0m0.004s
sys 0m0.001s
$ time ./heap 50000 < input.txt
real 0m0.030s
user 0m0.028s
sys 0m0.002s
$ time ./temp 50000 < input.txt
real 0m0.027s
user 0m0.026s
sys 0m0.002s
$ time ./heap 500000 < input.txt
real 0m0.263s
user 0m0.259s
sys 0m0.003s
$ time ./temp 500000 < input.txt
real 0m0.219s
user 0m0.216s
sys 0m0.003s
Qui heap è l'eseguibile di heapsort in virgola mobile e temp è l'eseguibile di Numero intero di heapsort.
Come possiamo vedere, c'è una differenza notevole nei tempi di esecuzione? Qual è il motivo? Posso caricare i codici se necessario.