Почему данный код работает неправильно?
Странный способ, но предложу свой вариант.
snippet
P.S. Просто у вас он странно работает, точность зависит от количества циклов, но даже на 1000 циклов явно видно как линии "залазят" на квадраты.
P.P.S. По колизиям можно тут алгоритмы взять.
Потому что строгое равенство не используют для вещественных чисел из-за проблем с точностью их компьютерного представления.