It's interesting to learn how these problems come up due to some limitation even if we implement the algorithm in a "correct" way. And choosing a solution for the problem is always a tradeoff between correctness and complexity. The important thing is to understand the reason behind it so that we can make improvement on the original implementation.
Definitely be aware of floating point imprecision for Assignment 3. Imprecision could cause significant noise and granularity in the renderings
Why ignoring re-intersection with the last object hit would just works fro flat objects?