Method B is more precise for a perfect circle. You are talking about running through every point in the circle, in Method A, and I'm assuming that's not small number of points (probably at least 12). Consider, then, that you are looping through points -- and conditionals are slower than non-conditional operations.
On the other hand, method B uses square roots. This is not cheap, but a single square root is almost certainly better than n
conditionals.
Having said all of that, I'm pretty certain method B is going to be your best bet if you want both accuracy and good speed.
The correct and standard approach is actually this:
Method C
- Calculate rectangle bounds (either their own bounds if no rectangle rotation, or their bounding boxes if they are rotated in the plane).
- Calculate each circle's rectangular bounds.
- Apply a fast range overlap test in each of x and y axes to check for intersection of bound between object A and B (maybe a rectangle and a circle). If overlap, continue, else break as there is no way they can overlap if their bounds don't overlap.
- Apply the more expensive test circle-circle or rect-circle intersection test to see if they actually do overlap. This is where the somewhat costly square root ops come in, to determine whether each of the 4 points of the given rect are within the radius of the circle.
A hierarchical approach like this, where you test successive possibilities for elimination, by order of increasing cost (of conditional), is ubiquitous in all forms of collision detection.
Ultimately, you want to avoid conditionals, particularly lengthy loops, inasmuch as possible. See this thread for an idea of precedence. This is why lower level languages such as C offer loop-unrolling as a compile-time optimisation.
EDIT opatut has kindly noted that square roots are not a requirement for methods B & C (see comments), leaving method A as the clear worst method.