Ticket #335 (new task)
export floats and doubles with correct precision
| Reported by: | hamish | Owned by: | grass-dev@… |
|---|---|---|---|
| Priority: | critical | Milestone: | 6.4.4 |
| Component: | Default | Version: | svn-develbranch6 |
| Keywords: | precision | Cc: | |
| Platform: | All | CPU: | All |
Description
see http://thread.gmane.org/gmane.comp.gis.grass.devel/29622/
this started with lib/db/dbmi_base/valuefmt.c %lf -> %.15g
High priority: r.what, r.univar sum_str, r.info's fancy report min= max=, and r.colors. Also 'g.region -g' -> lib/gis/wind_format.c:
static int format_double(double value, char *buf)
{
sprintf(buf, "%.8f", value);
G_trim_decimal(buf);
return 0;
}
I notice that raster/r.mapcalc/expression.c uses %.8g for a double.
for lat/lon, %.8f is approx 1mm (1852*60*1e-8; ie better than RTK GPS), for meter/feet based units it's very very small.
I guess we may as well to do this properly, i.e. split off FCELL values to something less precise ( %.6g, %f, ? ). Maybe new G_format_double() and G_format_float() fns for that?
$ svngrep -r '%\.[1-9][0-9][fg]' * | cut -f1 -d: | uniq display/d.rast.edit/edit.c display/d.zoom/set.c general/g.setproj/main.c general/g.setproj/get_num.c general/g.setproj/get_deg.c lib/proj/convert.c lib/proj/get_proj.c lib/vector/rtree/gammavol.c lib/vector/Vlib/intersect.c lib/gis/quant_io.c lib/gis/gislib.dox lib/gis/proj3.c lib/gis/color_write.c lib/gis/cats.c lib/g3d/g3dkeys.c lib/g3d/writeascii.c lib/g3d/filecompare.c lib/g3d/g3dcats.c lib/db/dbmi_base/datetime.c lib/db/dbmi_base/valuefmt.c ps/ps.map/ps_fclrtbl.c raster/r.colors/rules.c raster/r.stats/raw_stats.c raster/r.univar2/stats.c raster/r.reclass/main.c raster/r.recode/read_rules.c raster/r.info/main.c raster/r.quant/read_rules.c raster/r.distance/report.c raster/r.cats/main.c raster/r.external/main.c raster/r.what/main.c raster/r.statistics/o_average.c raster/r.average/main.c scripts/r.in.srtm/r.in.srtm vector/v.to.points/main.c vector/v.segment/main.c vector/v.label.sa/main.c vector/v.what.rast/main.c vector/v.to.db/update.c vector/v.to.db/report.c vector/v.kernel/main.c vector/v.in.ascii/points.c
the list is long and manual review is needed for each one.
Hamish
