[GRASS-dev] nasty export of doubles

Hamish hamish_b at yahoo.com
Thu Oct 9 00:56:42 EDT 2008


Glynn:
> Too much precision is ugly. Too little precision makes it impossible
> to use small values. A general-purpose conversion routine such as this
> needs to handle the full range of floating-point values, which
> basically means %.15g.

ok. I'll give that a go.

What I had in mind previously was something along the lines of

{
  double easting = 593685.123000;

  fsd = 15 - floor(log10(fabs(easting))+1);
  if ( fsd < 0 ) fsd = 0;
  sprintf(double_fmt, "%%.%df", fsd);

  sprintf(double_str, double_fmt, easting);
  G_trim_decimal(double_str);

  printf("east=%s", double_str);
}


there are more to audit ...  r.what, r.univar sum_str, r.info's fancy
report min= max=, and r.colors seem high priority.

I guess we may as well to do this properly, i.e. split off FCELL values
to something less precise ( %.6g,  %f,  ? ).

$ 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


as the list is long and manual review is needed, if needed we can file
a trac ticket and tick them off one by one.


{f,s}scanf(, "%lf", ) is ok, yes?


Hamish


More information about the grass-dev mailing list