On 09/06/2012 11:39 AM, Stéphane Henriod wrote:
But then if this is confirmed to be a wanted behavior, then we should
document it explicitely somewhere

This is wanted behaviour, the relevant defines/macros and an explanation are in node-ram-cache.h starting at line 16. You could probably remove the "#define FIXED_POINT" line to make it use floatingpoint, but as FIXED_POINT has been the standard for quite some time I wouldn't expect that everything works properly without it. Also, what would be the point, making it slower on purpose? I do not think this needs to be documented - these are essentially internal tables, and using fixed point arithmetic to speed things up and/or ease storage requirements is pretty much one of the first lessons in "programming for beginners".

What should probably be changed though is the define
 #define DOUBLE_TO_FIX(x) ((int)((x) * scale))
This will cause an unexpected loss of precission due to conversion errors from the integer cast, as I discovered when I wrote a little tool to convert the planet_osm_nodes table to the new flatnodes-file: DOUBLE_TO_FIX(FIX_TO_DOUBLE(x)) does _NOT_ always return x. This macro should probably use a proper "round()" instead of the integer cast.

_______________________________________________
dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev

Reply via email to