On Aug 29, 2012, at 5:53 PM, Chris Stinemetz wrote: > Just one question. If the two sets of coordinates are the same I was > expecting the distance to be 0 miles. > > Instead I get: > > 2.19558883102012e-013 > > For the following example. > > #!/usr/bin/perl > > use strict; > use warnings; > > use feature qw(say); > use Geo::Ellipsoid; > > my $lat1 = 39.316858; > my $lat2 = 39.316858; > my $lon1 = -94.963194; > my $lon2 = -94.963194; > > > my $ellipsoid = Geo::Ellipsoid->new(units=>'degrees', dist=>'miles'); > say $ellipsoid->range($lat1,$lon1,$lat2,$lon2); > > If it is the expected outcome would you please explain why?
Because floating-point arithmetic as done by limited precision computers is always an approximation. An IEEE 754 double-precision 64-bit floating point number uses a 53-bit fraction and therefore has about 16 decimal digits of precision. So calculating zero within 13 digits (e-013) is pretty good. The calculation done by the Geo::Ellipsoid module is very complex and involves sines, cosines, tangents, etc. Precision will be lost with each floating-point operation. Have you worked out what 2e-13 miles is in inches? For all practical purposes, it IS zero. -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/