Thanks Brian this does indeed seem to be the root cause of my int cast issues. The following sample code returns the proper results now. #include <stdio.h> #include <fpu_control.h> double latLng[] = {40.496538,-79.937384,40.495530,-79.938170,40.495740,-79.940830,40.490650,-79.951690,40.480650,-79.965050,40.457950,-79.986940,40.452730,-79.996260,40.445500,-79.990520,40.429040,-79.999250,40.413790,-80.010820,40.411350,-80.005050,40.412160,-79.998210,40.414170,-79.996780,40.413860,-79.987550,40.496538,-79.937384,40.496280,-79.936740,40.496280,-79.936740,40.496050,-79.936890,40.495730,-79.937120,40.495280,-79.937510,40.495280,-79.937510,40.495530,-79.938170,40.495680,-79.938520,40.495930,-79.939060,40.495990,-79.939390,40.496000,-79.939650,40.495990,-79.939880,40.495900,-79.940320,40.495900,-79.940320,40.495890,-79.940360,40.495890,-79.940400,40.495860,-79.940660,40.495740,-79.940830,40.494570,-79.942290,40.494310,-79.942870,40.492740,-79.948960,40.492390,-79.949690,40.491790,-79.950530,40.491360,-79.950970,40.490650,-79.951690,40.489460,-79.953230,40.486970,-79.957710,40.485620,-79.959780,40.484710,-79.960840,40.482900,-79.962530,40.480650,-79.965050,40.480000,-79.965720,40.479610,-79.966100,40.479080,-79.966680,40.478000,-79.968120,40.477130,-79.968890,40.475780,-79.970030,40.474530,-79.971190,40.474120,-79.971500,40.496500,-79.937399,40.496538,-79.937384,40.414560,-80.009280,40.414210,-80.009600,40.414030,-80.009700,40.413800,-80.009820,40.413680,-80.009860,40.413680,-80.009860,40.413570,-80.010040,40.413500,-80.010230,40.413540,-80.010500,40.413790,-80.010820,40.413970,-80.010820,40.414120,-80.010700,40.414210,-80.010360,40.414090,-80.009830,40.414030,-80.009700,40.413670,-80.009160,40.412720,-80.007700,40.412520,-80.007460,40.412090,-80.007040,40.411110,-80.006100,40.411110,-80.006100,40.411350,-80.005050,40.412050,-80.001740,40.411760,-79.999480,40.411820,-79.998930,40.412160,-79.998210,40.413210,-79.997020,40.413530,-79.996810,40.413730,-79.996770,40.414170,-79.996780,40.414310,-79.992720,40.414320,-79.991850,40.414350,-79.990300,40.414410,-79.988860,40.414430,-79.988330,40.414430,-79.988240,40.414430,-79.987720,40.414430,-79.987720,40.414290,-79.987580,40.413860,-79.987550,40.413900,-79.987599,40.413860,-79.987550}; int main(int argc, char *argv[]) { int iLat,iLng; //change FPU to double precision so results //are consistent across platforms fpu_control_t cw; _FPU_GETCW(cw); cw &= ~_FPU_EXTENDED; cw |= _FPU_DOUBLE; _FPU_SETCW(cw); for(int iCount=0;iCount<99;iCount+=2) { printf("original %.6f,%.6f\n",latLng[iCount],latLng[iCount+1]); iLat = (int)(latLng[iCount] * 1000000.0); iLng = (int)(latLng[iCount+1] * 1000000.0); printf("int cast: %d,%d\n",iLat,iLng); }//end for(int iCount=0;iCount<99;iCount++) }//end int main(int argc, char *argv[]) Cheers, Joe Brian Gough wrote on 7/25/2004, 5:56 AM: > Yes, getting the standard IEEE behavior for comparing results across > platforms is really useful. On x86 systems it is possible to put the > processor into the standard IEEE double precision mode by setting the > floating point control word. > > For GNU/Linux the header file /usr/include/fpu_control.h has macros > _FPU_GETCW and _FPU_SETCW for changing the settings. These macros are > internal (I haven't seen a documented interface to them) but you can > see how they work there anyway -- it is one line of inline assembly. > > If you look in the IEEE chapter of the GNU Scientific Library > Reference Manual (http://www.gnu.org/software/gsl/) there is some > discussion about this and a function which allows you to set all the > parameters of the fpu mode from an enviroment variable.