在写如下代码时,循环了几次,D都算出是20,结果其中有几次 i 没有自加 1
float D = abs(zhang[k].xin.y - bk[m][n+1]*zhang[k].xin.x - bk[m][n])/sqrt(1+bk[m][n+1]*bk[m][n+1]);
if(D >= 40)
i++;
其中D为浮点型数,40为整形数,查资料总结如下:
float x;
千万不要写0 ==x;
请写出 float x 与“零值”比较的 if 语句:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
浮点数在计算机中都是以近似值储存的,是在一个相对精确的范围内,因此与 0 比较的浮点数可能比 0 大或者小,不是绝对的相等。
EPSINON 应该是一个很小的值吧 因为计算机在处理浮点数的时候是有误差的,所以判断两个浮点数是不是相同,是要判断是不是落在同一个区间的,这个区间就是 [-EPSINON,EPSINON] EPSINON一般很小,10的-6次方以下吧,具体的好像不确定的,和机器有关