Precision problems. For example 402 = 1600 and 40.001 = 1600,080001. Difference of 0.08: it might skip over checked range.
Also: difference of -0.000000001 will not be taken by your program.
Well, you can adjust step size and comparsion precision depending on input value. But you need to mathematically analyse your algorithm and deduct number/constants relations
I also think that Taylor's suits better for finding a square root. You can google Taylor`s formula which divides a function by its derivative to get a good approximation. And that`s all you`ll get, an approximation, not an exact value. But let`s take a look at your algorithm.
With n/2 what you`re doing is to reduce the search space in halves, so you are using binary search, which is good to get a good approximation to a square root.
On the other hand, you also seem to be using something like a brute force algorithm, increassing start by epsilon (0.001) in line 20, which doesn`t sound good for a square root, in terms of computing costs.
Why are you testing (n-(mid*mid)>=0) in line 16? just for clarification, it might be abs()...? if you cannot use math.h, then, define your own abs. It will clarify your code.
If you can`t find anwers for numbers between 0 and 1, then you might want to take a look at the search space you are searching for.