我需要对已排序数字的数组进行优化的二进制搜索算法.我做了这个,发现使用float来存储数字比使用整数更快,因为最后我必须计算
(frameNumber-this->frameNumber[imin])/(this->frameNumber[imax]-this->frameNumber[imin])
Run Code Online (Sandbox Code Playgroud)
this->frameNumber[imin]是最大的frameNumber不等于,frameNumber并且this->frameNumber[imax]是最大的frame_umber .该代码用于计算两个关键帧之间的进度.frameNumber数组是静态的.我只需要对它进行一次排序.但是使用二进制搜索和上面的代码多次访问它来计算进度.
从int到float的转换花费了一些周期.然后我发现在asm中有很多fpu指令.我担心它们可能比整数慢.
所以这是问题所在.我可以将已排序的浮点数数组转换为int*并对其进行二进制搜索吗?
这意味着:
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,...);
}
Run Code Online (Sandbox Code Playgroud)
或者我的上述结论是错误的?(比如将int转换为浮点数不是那么算,或者浮点数之间的比较与整数相同?
非常感谢!