void CcsTest::UpdateTarget () { int prec; long frmtXLat, frmtYLng, frmtZHgt; char ctemp [24]; // Is this a geographic coordinate??? if (CS_isgeo (m_TrgKeyName)) { if (m_DecimalDegrees) { prec = m_HighPrecision ? 13 : 9; frmtXLat = prec; frmtYLng = prec; } else { prec = m_HighPrecision ? 6 : 2; frmtXLat = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | (prec + 1); frmtYLng = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | cs_ATOF_XEAST | (prec + 1); } prec = m_HighPrecision ? 4 : 2; frmtZHgt = cs_ATOF_COMMA | (prec + 1); CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [1],frmtXLat); m_TrgXLatitude = ctemp; CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [0],frmtYLng); m_TrgYLongitude = ctemp; CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [2],frmtZHgt); m_TrgZHeight = ctemp; m_TrgGridScale = "Not Applicable"; m_TrgConvergence = "Not Applicable"; } else { prec = m_HighPrecision ? 5 : 3; frmtXLat = cs_ATOF_COMMA | (prec + 1); frmtYLng = cs_ATOF_COMMA | (prec + 1); frmtZHgt = cs_ATOF_COMMA | (prec + 1); CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [0],frmtXLat); m_TrgXLatitude = ctemp; CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [1],frmtYLng); m_TrgYLongitude = ctemp; CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [2],frmtZHgt); m_TrgZHeight = ctemp; // Grid Scale for the target system. if (m_TargetScale >= 9999.00) { m_TrgGridScale = "Infinite"; } else if (m_TargetScale > 0.0) { prec = m_HighPrecision ? 9 : 5; CS_ftoa (ctemp,sizeof (ctemp),m_TargetScale,(prec + 1)); m_TrgGridScale = ctemp; } else if (m_TargetScale < 0.0) { m_TrgGridScale = "Domain Err"; } else { m_TrgGridScale = ""; } // Convergence for the source system. if (m_TargetConvergence > -360.0) { if (m_DecimalDegrees) { prec = m_HighPrecision ? 9 : 5; CS_ftoa (ctemp,sizeof (ctemp),m_TargetConvergence,(prec + 1)); m_TrgConvergence = ctemp; } else { prec = m_HighPrecision ? 4 : 0; frmtYLng = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | cs_ATOF_XEAST | (prec + 1); CS_ftoa (ctemp,sizeof (ctemp),m_TargetConvergence,frmtYLng); m_TrgConvergence = ctemp; } } else if (m_TargetConvergence == -360.0) { m_TrgConvergence = "Domain Err"; } else { m_TrgConvergence = ""; } } return; }
int CStestF (bool verbose,long32_t duration) { int err_cnt; int idx; int prec; size_t localeSize; long32_t il; char* localeIdPtr; char* localePtr; double dbl1, dbl2, tol; char bufr [32]; localePtr = 0; duration *= 2000L; if (verbose) { printf ("Setting locale to \"C\".\n"); } localeIdPtr = setlocale (LC_ALL,NULL); if (localeIdPtr != 0) { localeSize = strlen (localeIdPtr) + 1; localePtr = (char*)malloc (localeSize); if (localePtr != 0) { CS_stncp (localePtr,localeIdPtr,(int)localeSize); } } setlocale (LC_ALL,"C"); printf ("Using sprintf to check CS_atof (no DMS).\n"); err_cnt = 0; for (il = 0; il < duration && err_cnt == 0; il += 1) { dbl1 = CStestRN (-1E+12,1E+12); if (fabs (dbl1) < 1E-23) continue; sprintf (bufr,"%28.14f",dbl1); CS_atof (&dbl2,bufr); prec = (int)log10 (fabs (dbl1)); prec = (int)log10 (fabs (dbl1)) - 14; tol = pow (10.0,(double)prec); if (fabs (dbl1 -dbl2) > tol) { printf ("CS_atof produced %f from %s.\n",dbl2,bufr); err_cnt += 1; } } printf ("Using CS_atof to check CS_ftoa.\n"); for (il = 0; il < duration && err_cnt < 4; il += 1) { idx = il % 7; dbl1 = CStestRN (fTable [idx].min,fTable [idx].max); CS_ftoa (bufr,sizeof (bufr),dbl1,fTable [idx].format); CS_atof (&dbl2,bufr); if (fabs (dbl1 - dbl2) > fTable [idx].tol) { printf ("CS_atof/ftoa failed: %f -> %s ->%f\n",dbl1,bufr,dbl2); err_cnt += 1; } } if (localePtr != 0) { if (verbose) { printf ("Resetting locale to \"%s\".\n",localePtr); } setlocale (LC_ALL,localePtr); free (localePtr); } return (err_cnt); }