[PROJ] geodtest/planimeter test failure

Charles Karney charles.karney at gmail.com
Sat Sep 14 17:28:40 PDT 2024


I recommend you start with the sin(-90) != -1 failure.  In particular
can you check the inputs

   x, (double)qd

and outputs

   r, q

of the call to remquo in sincosdx in geodesic.c line 179.  Buggy
implementations of remquo have been a problem in the past.

Thanks...

   --Charles

On 9/14/24 2:26 PM, Greg Troxel via PROJ wrote:
> I have several failing tests.  I'm going to post about them in small
> groups, because I suspect they might have a common cause.  I realize the
> problem could be in my toolchain.  I'll rerun paranoia and NetBSD's
> regression tests.
> 
> My first question is: Do regression tests all pass for everyone else, on
> all platforms they try to run them on?  If anyone has a clean pass on
> anything that isn't windows/mac/linux, please email me privately and
> I'll summarize.  If you have any failures, please post here.
> 
> My environment
>    NetBSD 10 (up to date with the branch)
>    gcc version 10.5.0 (nb2 20230710)
>    building with cmake in a build directory
>    9th gen i7, dell workstation (not an odd computer)
> 
> geodtest prints:
> 
>    checkEquals fails: 1.001875e+07 != 3.002268e+07 +/- 1
>    checkEquals fails: 1.001875e+07 != 2.002072e+07 +/- 1
>    Planimeter0 fail: 2
>    checkEquals fails: 7.612398e-07 != 1000000 +/- 0.01
>    Planimeter29 fail: 1
> 
> Looking at Planimeter0 and quoting sparsely, the failing tests are
> these, on the same inputs.
> 
>    double pd[3][2] = {{90, 0}, {0, 0}, {0, 90}};
> 
>    planimeter(&g, pd, 3, &perimeter, &area);
>    result += checkEquals(perimeter, 30022685, 1);
>    result += checkEquals(area, 63758202715511.0, 1);
> 
>    polylength(&g, pd, 3, &perimeter);
>    result += checkEquals(perimeter, 20020719, 1);
> 
> 
> Do others build with -ffloat-store to avoid extended precision?  (I
> didn't find any such instructions in the readme.)
> 
> Planimeter29:
> 
>    geod_init(&g, wgs84_a, wgs84_f);
>    geod_polygon_init(&p, 0);
>    geod_polygon_addpoint(&g, &p, 0, 0);
>    geod_polygon_addedge(&g, &p,  90, 1000);
>    geod_polygon_addedge(&g, &p,   0, 1000);
>    geod_polygon_addedge(&g, &p, -90, 1000);
>    geod_polygon_compute(&g, &p, 0, 1, &area, nullptr);
>    /* The area should be 1e6.  Prior to the fix it was 1e6 - A/2, where
>     * A = ellipsoid area. */
>    result += checkEquals(area, 1000000.0, 0.01);
> 
> 
> geodsigntest prints:
> 
>    Line 149: sin(-90) != -1 (1)
>    1 failure
> 
> due to
> 
>    #define checksincosd(x, s, c) do {            \
>        T sx, cx;                                 \
>        geod_sincosd(x, &sx, &cx);                \
>        if (equiv(s, sx)) {                       \
>          printf("Line %d: sin(%g) != %g (%g)\n", \
>                 __LINE__, x, s, sx);             \
>          ++n;                                    \
>        }                                         \
>        if (equiv(c, cx)) {                       \
>          printf("Line %d: cos(%g) != %g (%g)\n", \
>                 __LINE__, x, c, cx);             \
>          ++n;                                    \
>        }                                         \
>      } while (0)
> 
>       checksincosd(- 90.0, -1.0, +0.0);
> 
> 
> I'll keep looking, but any clues appreciated.
> _______________________________________________
> PROJ mailing list
> PROJ at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/proj

-- 
Charles Karney <karney at alum.mit.edu>
702 Prospect Ave
Princeton, NJ 08540-4037


More information about the PROJ mailing list