Вероятно, это связано с ошибками округления при использовании двойных чисел, поскольку 0,3 на самом деле не хранится как 0,3 точно внутри.
Один из способов сравнения пар - учесть некоторую ошибку в сравнении.
Пример
if(abs(shiftx - shifty) < 0.000001)