Ho bisogno di un algoritmo di ricerca binaria ottimizzato su una matrice di numeri ordinati. Ho fatto questo e ha scoperto che l'uso di float ai numeri Store è più veloce rispetto all'utilizzo intero, perché alla fine devo calcolareConfronta array float come int array
(frameNumber-this->frameNumber[imin])/(this->frameNumber[imax]-this->frameNumber[imin])
this->frameNumber[imin]
è il più grande frameNumber meno uguali che frameNumber
e this->frameNumber[imax]
è il più piccolo uno più grande uguale quella. Quel codice serve a calcolare l'avanzamento tra i due keyframe. l'array frameNumber è statico. Devo solo ordinarlo una volta. Ma accedilo molte volte con una ricerca binaria e il codice sopra per calcolare i progressi.
La conversione da int a galleggiante ha trascorso alcuni cicli. Poi ho scoperto che nell'asma ci sono un sacco di istruzioni per la Fpu. Mi preoccupo che potrebbero essere più lenti dei numeri interi.
Quindi ecco la domanda. Posso convertire un array di numeri in virgola mobile ordinati in un * int e eseguire una ricerca binaria su di esso?
Ciò significa:
void binary_search(float key,float* array,...)
{
int key_integer=*(int*)&key;
int* array_intege(int*)array;
binary_search_for_integers(key_integer,array_integer,...);
}
O la mia sopra conclusioni sono sbagliati? (Come la fusione int a stare a galla non è così costy, o confronto tra i punti di galleggiamento è lo stesso veloce come numeri interi?
Grazie mille!
La tua domanda non è chiara, ma la risposta diretta è no non puoi convertire un array come questo. – Amit
Normalmente, questo non funzionerà - interpreterà i bit di ciascun elemento come ints anziché float. Tuttavia, esiste un'interessante stranezza con il punto di virgola IEEE che preservano l'ordine se interpretati come numeri interi della stessa lunghezza. Quindi la tua ricerca binaria potrebbe effettivamente funzionare se 'sizeof (int) == sizeof (float)' sul tuo sistema e nessuno dei valori è NaN. Ma non è garantito dagli standard C o C++. – rlbond
Inoltre, non funziona con i numeri negativi. – fangzhangmnm