As stated, you need to go talk to whoever set the requirements for your measurements. The dynamic range and precision required are just absurd.
Just for rough numbers, let's say your current range is 5 mA to 50 A. That's 4 orders of magnitude. If each current measurement must be accurate to .1%, that requires a system resolution of 5 uA. 50 A divided by 50 uA is 10,000,000. That is a 24-bit dynamic range. Trying to get this level of accuracy is enough to boggle the mind. At the least, keeping a shunt at a constant resistance (to within 0.1 ppm!) over a current range like this is mind-boggling. Think about self-heating for a bit. Hint - it varies as the square of the current. Think about how this affects the resistance of the shunt.
Much more reasonable is to consider exactly what range of currents will be encountered in a discharge cycle, and more importantly to establish just exactly why you need 0.1% accuracy. A 10-bit A/D converter will provide a nominal 0.1% resolution (with accuracy somewhat less due to nonlinearity), but attempting to extend this to calculate battery capacity to this accuracy is just silly. Among other things, battery capacity changes with discharge current level, temperature and age. Batteries are not precision artifacts.
Ordinarily, you would measure capacity based on a constant current discharge, with the test stopping at a voltage well above 1/2 the starting voltage. The test is then repeated for different current levels. To do otherwise is wasted effort. If you want to wring the last few electrons out of the battery, consider that, in a multi-cell battery this will inevitably cause one or more cells to become reverse-biased, and this is most definitely not good for the cells.
If you do this (constant-current discharge with a fixed cutoff) then a 10-bit measurement of the voltage and the current will provide a nominal energy resolution of about 9 bits, or ~.2%. For each different current level you can vary the shunt resistance to get the peak current measurement near full scale of the ADC.
Even if you decide to try for a full discharge of the test cell, keep in mind that, once you're below about half the original voltage, the time left will be (relatively speaking) very small, and inaccuracies introduced by limited ADC resolution will have only a very small effect on total accuracy.
And finally, if you really, really must try for this accuracy, you will need to pay extraordinary attention to the accuracy of your charge cycles. Extreme consistency will be the key, with absolute accuracy of charge current and temperatures required. Plus, you will need to provide some way to guarantee that each cell is (in absolute terms) discharged to the exact same level before starting a charge cycle.
Your ADC input voltage range is (Vref) 5V or 2.56 V if you select the internal voltage reference of the MCU.
Then use a shunt resistor to give you the desired resolution for the minimum current in a given range and calculate the end of range as:
$$I_{max} = \frac{V_{ref}}{R_{shunt}} \cdot \frac{1023}{1024} $$
for example: to measure 1 mA in 0.01 mA resolution using the internal
$$V_{ref} = 2.56V \text{(ADC Step = 2.56 / 1024 = 2.5 mV)} $$
I need to get 100 as ADC output for 1 mA;
$$V_{in} = 2.5mV \cdot 100 = 0.25V $$
$$R = \frac{0.25V}{1mA} = 250 \Omega $$
$$I_{max} = \frac{2.56}{250} \cdot \frac{1023}{1024} = 10.23 mA$$
then with shunt resistor of 250 Ohm, I Cover 1 to 10 mA.
Finally:
Best Answer
Since you don't need a lot of current, (0.5V/10Ω = 50 mA), I would say using a fairly chunky op-amp as a transimpedance amplifier would do the job.
The output will be: \$V_{out} = I_{load} * R_{feedback} + V_{inPositive}\$
The first schematic has the advantage that the output has no offset. However, you need a negative voltage rail.
The second version does not require a negative voltage rail, but the output has a additional 0.5V offset.
In both circuits, the op-amp needs to be able to source the current that flows through the biosensor. With a 10Ω nominal sensor, and 0.5V, this is 50 mA, which is pretty significant, so you will need a pretty chunky op-amp. However, you would likely wind up needing a similar device for the current-source and instrumentation amp design, so there is no real advantage there.
Lastly, assuming your sensor does not go to 0Ω, it would probably be a good idea to do some offset subtraction and scaling of the output of the transimpedance amp so you're using your full ADC range.
If you can get me some more information on your system, I can probably help with that.
Edit: Phil Frost asked a question the the comments to the OP that brought up the question of whether the 50 mA current through the sensor is actually needed for it to operate correctly, or whether it was just so the circuit would produce an easy-to-measure voltage drop.
If it's just make the circuit generate a voltage drop that's easy to measure, there are other circuit topologies that would be easier to implement, with a smaller load current.
Further Edit:
In that case, I would drop the excitation voltage to ~0.1V. This would give you a load current of ~10 mA, which is well within the range of most op-amps, while not being so small that noise becomes a significant consideration.
Furthermore, I would probably use the second topology from above, as with that layout the precision reference voltage does not need to be able to supply a significant ammount of current, which means you could use a more common voltage reference, and a voltage divider to generate your 0.1V reference.
To maintain a decent amount of gain, you will need to increase the feedback resistor.
Lastly, I would add some capacitance across the feedback resistor, to prevent the possibility of the system oscillating. Since this is a bio-feedback thing, you're not going to have much in the way of high-frequency signals in the source, so we can roll-off the system at a few hundred Hz to a few Khz without too much issue.
We then get something like:
You will likely need to adjust the values to work (I just pulled the value of the feedback capacitor out of my posterior, for example), but it should be a good start.