Дано:
int a = 1 , b = 2;
эта строка кода:
double d = (double)(a/b); // d is 0.
это не то же самое, что:
double d = ((double)a/b); // d is 0.5
In в первом случае вы выполняете целочисленное деление перед преобразованием результата.
Во втором случае вы преобразуете числитель в double
, а затем деление, что делает деление с плавающей запятой.
В вашем случае ошибка может возникнуть из-за того, что код ожидает ненулевого наклона, но целочисленное деление дает вам ноль.
Обратите внимание, что это сравнение:
if( m!=slope)
в корне ошибочен. Вы никогда не должны сравнивать числа с плавающей запятой на предмет равенства. Вместо этого используйте порог для сравнения.