[Proj] Re: Proj4 Bug (rtodms)
cp
ch.panel at free.fr
Wed Nov 8 01:29:25 PST 2006
first, excuse me for my poor english.
"Gerald I. Evenden" <gerald.evenden at verizon.mail> a écrit dans le message de
news: 200611051448.17043.gerald.evenden at verizon.mail...
>
> So far, I have not found any way to reproduce your problem and
> consequently
> find no reason to change code. However, I do have a couple of questions:
this simple program produce a "NOT OK" output :
#include <math.h>
#include <stdio.h>
static int res1,res2;
int main()
{
double r=240.0;
res1 = r / 60.;
res2 = floor(r / 60.);
printf("%s",(res1==res2) ? "OK!" : "NOT OK!");
getch();
}
I think that because floor corrects values that were epsilon under the
absolute value, if epsilon is smaller than the floating point precision.
my compiler is Borland C++ compiler and I work on Windows XP, but I don't
think that C runtime libraries at this point are differents ??? (I believe
not because of portability with Kylix) ???
>
> 1. on what hardware (chip) was this problem created,
Intel Pentium
>
> 2. what compiler/library was employed and
Borland C (CW3230mt.dll)
>
> 3, level of optimization specified.
none
>
> Interestingly, r before being divided by 60 does not have a fractional
> component (exactly equal to 240.). The implication is that the floating
> point processor produces a "ragged" result where the mantissa is not
> rational. That is, something like 3.9999... is produced. The floor
> operation should still have produced 3 as the unchanged code did with
> simple
> conversion to integer with the memory assignment of the division
> operation.
> I suspect something is gummed up with the handling of the extra bits that
> are
> part of the mantissa in the floating point hardware.
I don't, but the hardware in the FPU works with 10 bytes instead of 8
because of precision and exact numbers doesn't exist in FPU
>
> Lastly, the problem line has been handle by:
> deg = (int)(r / 60.);
the problem cannot be resolved by this
> for some time in the libproj4 library. The cast was necessary to keep the
> compiler from complaining during -Wall runs.
>
> Lastly, rtodms is deprecated and will be replaced with rad2dms which
> allows
> for greater format flexibility and is (unlike rtodms) thread proof.
> --
> The whole religious complexion of the modern world is due
> to the absence from Jerusalem of a lunatic asylum.
> -- Havelock Ellis (1859-1939) British psychologist
> _______________________________________________
> Proj mailing list
> Proj at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/proj
>
More information about the Proj
mailing list