[GRASS5] r.in.gdal - precision problem in lib/gis/adj_cellhd.c

Radim Blazek blazek at itc.it
Fri Apr 8 03:07:12 EDT 2005


Brad Douglas wrote:
>>>sscanf(cellhd->north, "%.1f", &north);
>>>if (north > 90.0)
>>>    return (_("Illegal latitude for North.\n"));
>>>
>>It can silently damage data. I am not in favour.
> 
> It should suffice for this specific purpose as a short-term fix.  

It does not fix the problem, it just hides it. If we do that, nobody 
will fix that in next 10 years.

> Although shunned upon, that usage of sscanf() is littered throughout
> GRASS code.  I say we temporarily commit the above to get it "mostly"
> working and work on a permanent solution to non-integer comparisons.
> 
> Maybe we could do one of these:
> 
> /* Compares two floats to 'precision' decimal places */
> /* Returns 1 if equal, 0 otherwise                   */
> int G_f_equal(float a, float b, int precision)

> /* Compares two floats. "Precision adjusted"   */
> /* Returns positive, 0, or negative value if a */
> /* is greater, equal, or less than b           */
> float G_relcompare(float a, float b)

But the result will be a map with north > 90 in any case.

If we need a short term solution, I suggest to change the error to 
warning or maybe a warning for 90 < north < 90.000x and error for north 
 > 90.000x?

Radim




More information about the grass-dev mailing list