diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index 865e33b5ae1..25d162c0402 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -622,7 +622,10 @@ void print_window(struct Cell_head *window, int print_flag, int flat_flag, double convergence; if (G_projection() == PROJECTION_XY) - convergence = NAN; + // GCC 5.4.0 says 0./0. is -nan + // Clang 3.8.0 says 0./0. is nan + // I stick to -nan in msvc too. But this has to rechecked. + sscanf("-nan", "%lf", &convergence); else if (G_projection() == PROJECTION_LL) convergence = 0.0; else { diff --git a/lib/btree2/kdtree.c b/lib/btree2/kdtree.c index ec0d19e0abc..4c3090a9664 100644 --- a/lib/btree2/kdtree.c +++ b/lib/btree2/kdtree.c @@ -531,7 +531,7 @@ int kdtree_knn(struct kdtree *t, double *c, int *uid, double *d, int k, if (skip) sn.uid = *skip; - maxdist = INFINITY; + sscanf("inf", "%lf", &maxdist); found = 0; /* go down */ diff --git a/lib/vector/Vlib/box.c b/lib/vector/Vlib/box.c index 5ab5ef74e2d..48028852abd 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -247,7 +247,9 @@ int Vect_get_line_box(struct Map_info *Map, int line, struct bound_box *Box) Line = Plus->Line[line]; if (Line == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = nan_val; return 0; } @@ -311,7 +313,9 @@ int Vect_get_area_box(struct Map_info *Map, int area, struct bound_box *Box) Area = Plus->Area[area]; if (Area == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = nan_val; return 0; } @@ -357,7 +361,9 @@ int Vect_get_isle_box(struct Map_info *Map, int isle, struct bound_box *Box) Isle = Plus->Isle[isle]; if (Isle == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = nan_val; return 0; } diff --git a/raster/r.in.bin/main.c b/raster/r.in.bin/main.c index 9bd677eb274..45881f361cc 100644 --- a/raster/r.in.bin/main.c +++ b/raster/r.in.bin/main.c @@ -255,7 +255,8 @@ int main(int argc, char *argv[]) const char *outpre; char output[GNAME_MAX]; const char *title; - double null_val = NAN; + double null_val; + sscanf("-nan", "%lf", &null_val); int is_fp; int is_signed; int bytes, hbytes; diff --git a/raster/r.in.lidar/info.c b/raster/r.in.lidar/info.c index 0eb11819e3c..edab13c0829 100644 --- a/raster/r.in.lidar/info.c +++ b/raster/r.in.lidar/info.c @@ -97,7 +97,9 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + min_x = max_x = min_y = max_y = min_z = max_z = nan_val; G_verbose_message(_("Scanning data ...")); diff --git a/raster/r.li/r.li.padrange/padrange.c b/raster/r.li/r.li.padrange/padrange.c index dc383376b64..de55bb9c1dc 100644 --- a/raster/r.li/r.li.padrange/padrange.c +++ b/raster/r.li/r.li.padrange/padrange.c @@ -317,8 +317,8 @@ int calculate(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + sscanf("inf", "%lf", &min); /* inf */ + sscanf("-inf", "%lf", &max); /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; @@ -561,8 +561,8 @@ int calculateD(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + sscanf("inf", "%lf", &min); /* inf */ + sscanf("-inf", "%lf", &max); /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; @@ -805,8 +805,8 @@ int calculateF(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + sscanf("inf", "%lf", &min); /* inf */ + sscanf("-inf", "%lf", &max); /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; diff --git a/raster/r.out.gdal/main.c b/raster/r.out.gdal/main.c index dcb0c9d4e5a..9d946cf8791 100644 --- a/raster/r.out.gdal/main.c +++ b/raster/r.out.gdal/main.c @@ -998,6 +998,8 @@ int nodataval_check(double nodataval, GDALDataType datatype) double set_default_nodata_value(GDALDataType datatype, double min, double max) { + double nan_val; + sscanf("-nan", "%lf", &nan_val); switch (datatype) { case GDT_Byte: if (max < TYPE_BYTE_MAX) @@ -1043,11 +1045,11 @@ double set_default_nodata_value(GDALDataType datatype, double min, double max) case GDT_Float32: case GDT_CFloat32: - return NAN; + return nan_val; case GDT_Float64: case GDT_CFloat64: - return NAN; + return nan_val; default: return 0; diff --git a/raster/r.series.accumulate/main.c b/raster/r.series.accumulate/main.c index 2c526c30257..b17ec50725f 100644 --- a/raster/r.series.accumulate/main.c +++ b/raster/r.series.accumulate/main.c @@ -171,8 +171,8 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - lo = -INFINITY; - hi = INFINITY; + sscanf("-inf", "%lf", &lo); + sscanf("inf", "%lf", &hi); method = METHOD_GDD; if (G_strncasecmp(parm.method->answer, "gdd", 3) == 0) method = METHOD_GDD; diff --git a/raster/r.series/main.c b/raster/r.series/main.c index 387f164b96b..e05b0e716d9 100644 --- a/raster/r.series/main.c +++ b/raster/r.series/main.c @@ -227,8 +227,8 @@ int main(int argc, char *argv[]) threaded = nprocs > 1; #endif - lo = -INFINITY; - hi = INFINITY; + sscanf("-inf", "%lf", &lo); + sscanf("inf", "%lf", &hi); if (parm.range->answer) { lo = atof(parm.range->answers[0]); hi = atof(parm.range->answers[1]); diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index f14d50746a7..4eff2d386cb 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -198,8 +198,8 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - dmin = NAN; - dmax = NAN; + sscanf("-nan", "%lf", &dmin); /* set to nan as default */ + sscanf("-nan", "%lf", &dmax); /* set to nan as default */ zone_info.min = 0; zone_info.max = 0; zone_info.n_zones = 0; diff --git a/raster/r.univar/stats.c b/raster/r.univar/stats.c index e868d0ce2b0..e6abbcb5781 100644 --- a/raster/r.univar/stats.c +++ b/raster/r.univar/stats.c @@ -22,6 +22,8 @@ univar_stat *create_univar_stat_struct(int map_type, int n_perc) univar_stat *stats; int i; int n_zones = zone_info.n_zones; + double nan_val; + sscanf("-nan", "%lf", &nan_val); if (n_zones == 0) n_zones = 1; @@ -31,8 +33,8 @@ univar_stat *create_univar_stat_struct(int map_type, int n_perc) for (i = 0; i < n_zones; i++) { stats[i].sum = 0.0; stats[i].sumsq = 0.0; - stats[i].min = NAN; - stats[i].max = NAN; + stats[i].min = nan_val; /* set to nan as default */ + stats[i].max = nan_val; /* set to nan as default */ stats[i].n_perc = n_perc; if (n_perc > 0) stats[i].perc = (double *)G_malloc(n_perc * sizeof(double)); @@ -108,6 +110,8 @@ int print_stats(univar_stat *stats, enum OutputFormat format) } int z, n_zones = zone_info.n_zones; + double nan_val; + sscanf("-nan", "%lf", &nan_val); if (n_zones == 0) n_zones = 1; @@ -136,8 +140,9 @@ int print_stats(univar_stat *stats, enum OutputFormat format) stdev = sqrt(variance); var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ - if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = NAN; + if (stats[z].n == 0) { + stats[z].sum = stats[z].sum_abs = nan_val; + } snprintf(sum_str, sizeof(sum_str), "%.15g", stats[z].sum); G_trim_decimal(sum_str); @@ -272,9 +277,9 @@ int print_stats(univar_stat *stats, enum OutputFormat format) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = NAN; + quartile_25 = median = quartile_75 = nan_val; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = NAN; + quartile_perc[i] = nan_val; } else { for (i = 0; i < stats[z].n_perc; i++) { @@ -510,6 +515,8 @@ int print_stats_table(univar_stat *stats) { unsigned int i; int z, n_zones = zone_info.n_zones; + double nan_val; + sscanf("-nan", "%lf", &nan_val); if (n_zones == 0) n_zones = 1; @@ -584,7 +591,7 @@ int print_stats_table(univar_stat *stats) var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = NAN; + stats[z].sum = stats[z].sum_abs = nan_val; if (zone_info.n_zones) { int z_cat = z + zone_info.min; @@ -632,9 +639,9 @@ int print_stats_table(univar_stat *stats) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = NAN; + quartile_25 = median = quartile_75 = nan_val; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = NAN; + quartile_perc[i] = nan_val; } else { for (i = 0; i < stats[z].n_perc; i++) { diff --git a/raster3d/r3.in.lidar/info.c b/raster3d/r3.in.lidar/info.c index bf953f1d8b8..da4fd86fc4b 100644 --- a/raster3d/r3.in.lidar/info.c +++ b/raster3d/r3.in.lidar/info.c @@ -101,7 +101,9 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + min_x = max_x = min_y = max_y = min_z = max_z = nan_val; G_verbose_message(_("Scanning data ...")); diff --git a/vector/v.cluster/main.c b/vector/v.cluster/main.c index 49c7535beca..fece56d4e66 100644 --- a/vector/v.cluster/main.c +++ b/vector/v.cluster/main.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = INFINITY; + sscanf("inf", "%lf", &min); max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); @@ -462,7 +462,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = INFINITY; + sscanf("inf", "%lf", &min); max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); diff --git a/vector/v.distance/distance.c b/vector/v.distance/distance.c index 74c6d88a40d..569ee5812ea 100644 --- a/vector/v.distance/distance.c +++ b/vector/v.distance/distance.c @@ -11,7 +11,9 @@ int get_line_box(const struct line_pnts *Points, struct bound_box *box) int i; if (Points->n_points == 0) { - box->E = box->W = box->N = box->S = box->T = box->B = NAN; + double nan_val; + sscanf("-nan", "%lf", &nan_val); + box->E = box->W = box->N = box->S = box->T = box->B = nan_val; return 0; } diff --git a/vector/v.voronoi/skeleton.c b/vector/v.voronoi/skeleton.c index 9e052b76d0e..226e55d5071 100644 --- a/vector/v.voronoi/skeleton.c +++ b/vector/v.voronoi/skeleton.c @@ -533,7 +533,7 @@ int tie_up(void) IPoints[i]); } - distmin = INFINITY; + sscanf("inf", "%lf", &distmin); xmin = x; ymin = y;