����Ϻ����Ȥ���ͳ�ǡ�
Official Google Research Blog: Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are BrokenThe bug is in this line:6: int mid =(low + high) / 2;
�ʤ�Ȥ������ޤʥХ���
���̤��������ˤʤ�ʤ���Ǥ������ޤΤۤȤ�ɤΥޥ���ϡ�int��32bit�����顢���Υ��르�ꥺ��ǡ�2 ^ 31 - 1�Ȥ���int�κ����ͤ�Ķ����褦�� ���ȤϤʤ����顣
����äȰ㤤�ޤ���n >= (MAX_INT/2 + 1)��n�ʤ�ȯ�����ޤ��衣
�����ǡ�MAX_INT�� 0x7FFFFFFF������Ⱦʬ+1��0x40000000���Ȥ������Ȥ�low = high = 0x40000000 �λ���low + high = 0x80000000���Ȥ����������-0x40000000�����ʤ�� -1073741824 �Ȥ������Ȥˤʤ�ޤ���
�����ͻҤϡ��ʲ��ǺƸ����뤳�Ȥ�����ޤ���
#include <stdio.h> int main (int argc, char **argv){ signed int mid; signed int high = 0x40000000; signed int low = 0x40000000; mid = (high + low) / 2; printf("%d\n", mid); }
32bit platform�ʤ�ִ����̤�ס�-1073741824�Ȥ����������Ф�Ϥ��Ǥ���
�������������1GB���Τ��ˤ���������ç¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½bsearch������sort������Ȥ��������Ϥ��ޤ�ʤ������Ǥ��������Ū�ȶ����Ǥ�suffix array�Ȥ������Υ������ˤ֤������ꤽ���Ǥ���
���ʤߤˡ����򥳡��ɤϰʲ��Τ褦�ʴ����ˤʤ�ޤ�����
int mid(int low, int high){ /* macro �Ǥ⤤��? */ return low + ((high - low) / 2); }
�ϡ��ɥ������οʲ������եȥ������ΥХ���ʤ�������Ƥ��ޤä��Ȥ��������������������Τ�ޤ���͡�
Dan the Man with Too Many Bits to Crunch
�ɵ�:�����褯�������縵��Joshua Bloch�ΤȤ����ˤ�ܤäƤ�fix���ʡ����졣�󤸤���ȿ§���ǡ�
int mid(int low, int high){ return (int)(((double)high + (double)low)/2); }
�������ʤ��顢�ͤ���ǰ���Ƥ����Τϡ�����ͤ���� mid(int, int)�μ����ˤĤ��ƤʤΤǤ��ʥȥ�å��Хå��ε���̾���̤��
������ˤ��ޤ��Ƥ⡢�����ʶ��路���ְ㤤��񤤤Ƥ��ޤ����褦������������Ǥ��ޤäƤ����ʤ������ޤ�������򤴻�Ŧ���������ޤ��Ƥ��꤬�Ȥ��������ޤ���