Robert Sjoblom wrote:
* Or you just get used to the fact that some numbers are not exact in
floating point.
This got me thinking. How many decimal places do you need to
accurately, say, aim a laser somewhere in a 180 degree arc accurately
enough to hit a dime on the surface of the moon?

Alan

In short: it's pretty much impossible.
[...]
To bring it back on topic: could python handle these numbers reliably?

*Physically* impossible, not mathematically.

If you prefer, imagine putting a laser and a dime in deep space, far from any dust or atmosphere or gravitational distortion, so that we can assume perfectly Euclidean geometry. Put the dime some distance away, and aim the laser at the centre of it:


laser * --------------------------- + dime

Your margin of error in the aiming angle is given by the angle subtended by the dime. That is, you don't have to aim exactly at the centre (angle = 0 degrees), but at any angle between -a and +a degrees, whatever a happens to be. That angle a gives the precision needed.

(Strictly speaking, we should be talking about solid angles, steradians, rather than degrees. But for this thought experiment, the difference doesn't matter.)

Andre Walker-Loud has already given a back-of-the-envelope calculation which estimates that angle as about 1e-11, so the precision needed is about 12 decimal places.

Python's floats have 52 *binary* places of precision, or approximately 15 *decimal* places. So even though we may not be able to physically build a machine capable of aiming a laser to a precision of 0.00000000001 degrees, at least we can be comforted by the knowledge that a C double or a Python float is precise enough to handle the job.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to