[Proj] Problems with /Op option used to compile proj in Microsoft Visual Studio

Calogero Mauceri mauceri at actgate.com
Wed Mar 14 12:32:21 EST 2012

I've been struggling since a few days to understand a very odd behavior 
with proj.
I have 2 versions of proj libraries and utils, one compiled with 
Microsoft Visual C++ 2008 (Express Edition) and another one compiled 
with Microsoft Visual C++ 2003.

Analyzing some strange results in our processes, I found out that 
executing some transformations using the two proj libraries return two 
(very) different results.
Here is an example of a transformation that is giving me problems using 
the cs2cs utility.

cs2cs -f "%.5f" +proj=tpeqd +a=2440e3 +b=2440e3 +lat_1=-22.960070000 
+lon_1=65.546300000 +lat_2=-22.959730000 +lon_2=65.546160000 +no_defs 
+to +proj=longlat +a=2440e3 +b=2440e3 +lon_0=0 +no_defs
-2385.33232 0.00000

On the cs2cs compiled with Microsoft Visual C++ 2008 that transformation 
returns a meaningful result
65.56780        -23.01227 0.00000
while in the version compiled with Microsoft Visual C++ 2003, it returns
*       * 0.00000

The same result happens with other (few) sets of coordinates.
Looking at the error returned in the latter case, the pj_transform exits 
with error
-19: acos/asin: |arg| >1.+1e-14

The error happens in the aacos function: in the first case 
0.999999999999996 is passed to the function while in the other case the 
number passed to the aacos is 1.000000000000012.

Now, looking (by chance) at the compilation options of the proj, I 
noticed that between the options passed to the cl compiler there is the 
consistency floating point option " /Op". As stated in the "Microsoft 
Visual Floating-Point Optimization" 

"The consistency model can seriously reduce efficiency while 
simultaneously providing no guarantee of increased accuracy. To serious 
numerical programmers, this doesn't seem like a very good tradeoff and 
is the primary reason that the model is not generally well received."

Disabling that option, the result returned in the version of proj 
compiled with Microsoft Visual C++ 2003 is more consistent.
Is there any reason why the /Op option is used to compile the proj?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maptools.org/pipermail/proj/attachments/20120314/764ebca4/attachment.htm 

More information about the Proj mailing list