下面的代码是二分搜索,求ff在数组PMyX中的位置,算法也许需要完善,这里先只讨论效率个人认为,在while中用double类型ff来比较(程序中注释3的位置)速度是很慢的,尽管这个代码运行的次数不是很多,数组的大小>1.5M(Len>1.5M)
奇怪的是:采用注释1的变量,在注释2中进行整形变换,将注释3的ff改为整形ffint后,居然整体速度慢了无数,似乎多了无数另外的开销!
声明:别说,其它代码有影响,也别说,效率测试有问题,总之从这里找原因!
这里没有内存对齐的问题吧?
function BiAddSearch(PMyX: plongint; ff: double; Len: integer): integer; var Mid, StartPos, EndPos: integer; //search insert position by middle: ff insert to from startpos to endpos @SigNum
     PX: Plongint;
     //ffint:longint;//1
begin
     StartPos := 0;
     EndPos := Len - 1;
     //ffint:=trunc(ff);////2
     while (StartPos < EndPos - 1) do
     begin
          Mid := (EndPos - StartPos) div 2;
          px := PMyx;
          inc(px, mid + startpos);
          if ff  < px^ then EndPos := mid + startpos ////3
          else StartPos := mid + startpos;
     end;     result