<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Consolas",serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Just an FYI I am now subscribed to the mobilitydb dev mailing list, so all this kind of correspondence should continue there.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>It will allow for others who are interested to get more involved.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Thanks,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'>Regina<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Esteban Zimanyi [mailto:estebanzimanyi@gmail.com] <br><b>Sent:</b> Monday, August 23, 2021 12:59 PM<br><b>To:</b> Vicky Vergara <vicky@georepublic.de><br><b>Cc:</b> mobilitydb-dev@lists.osgeo.org; Regina Obe <lr@pcorp.us>; Mahmoud Sakr <m_attia_sakr@yahoo.com>; mohamed sayed <mohamed_bakli@aun.edu.eg>; SCHOEMANS Maxime <Maxime.Schoemans@ulb.be><br><b>Subject:</b> Re: Update about my experiments integrating PostGIS 3.1.3 and MobilityDB<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>I always solved that problem with the setPrecision functions<o:p></o:p></p><div><p class=MsoNormal><a href="https://docs.mobilitydb.com/MobilityDB/develop/ch04s05.html#box_setPrecision">https://docs.mobilitydb.com/MobilityDB/develop/ch04s05.html#box_setPrecision</a><o:p></o:p></p><div><p class=MsoNormal><a href="https://docs.mobilitydb.com/MobilityDB/develop/ch05s06.html#tpoint_setPrecision" target="_blank">https://docs.mobilitydb.com/MobilityDB/develop/ch05s06.html#tpoint_setPrecision</a><o:p></o:p></p></div><div><p class=MsoNormal>You can find numerous setPrecision calls in all the tests. I needed to do that when switching to PosgreSQL 13 because the output of the floating point values were different between versions.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>The difference now is that in PostGIS 3 they started using the ryu library for output coordinates. The difference wrt the other tests is that we need to output a geometry/geography as result of the trajectory function.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I have almost finished today to write a simple setPrecision function for geometry/geography so that for example, the test<o:p></o:p></p></div><div><p class=MsoNormal> SELECT ST_AsText(trajectory(tnpoint 'Npoint(1, 0.5)@2000-01-01'));<o:p></o:p></p></div><div><p class=MsoNormal>will be replaced by <o:p></o:p></p></div><div><p class=MsoNormal> SELECT ST_AsText(setPrecision(trajectory(tnpoint 'Npoint(1, 0.5)@2000-01-01'), 6));<o:p></o:p></p></div><div><p class=MsoNormal>and this will solve the multiplatform variation for the tests.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><br clear=all><o:p></o:p></p><div><div><div><div><p class=MsoNormal>------------------------------------------------------------<br>Prof. Esteban Zimanyi<br>Department of Computer & Decision Engineering  (CoDE) CP 165/15    <br>Universite Libre de Bruxelles            <br>Avenue F. D. Roosevelt 50                <br>B-1050 Brussels, Belgium                 <br>fax: + 32.2.650.47.13<br>tel: + 32.2.650.31.85<br>e-mail: <a href="mailto:esteban.zimanyi@ulb.be" target="_blank">esteban.zimanyi@ulb.be</a><br>Internet: <a href="http://cs.ulb.ac.be/members/esteban/" target="_blank">http://cs.ulb.ac.be/members/esteban/</a><br>------------------------------------------------------------<o:p></o:p></p></div></div></div></div><p class=MsoNormal><o:p> </o:p></p></div></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Mon, Aug 23, 2021 at 6:42 PM Vicky Vergara <<a href="mailto:vicky@georepublic.de" target="_blank">vicky@georepublic.de</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><div><p class=MsoNormal><span style='font-family:"Courier New";color:black;background:white'>Yeah, I have that problem also when testing on different platforms/compilers/postgres<br>But I resolved by using on some tests that were having precision problems with:<br>SET extra_float_digits = </span><b><span style='font-family:"Courier New";color:#FF5454;background:white'>-3</span></b><span style='font-family:"Courier New";color:black;background:white'>;<br><a href="https://github.com/pgRouting/pgrouting/blob/main/pgtap/withPoints/withPoints_oneToOne-compare-dijkstra.test.sql#L30" target="_blank">https://github.com/pgRouting/pgrouting/blob/main/pgtap/withPoints/withPoints_oneToOne-compare-dijkstra.test.sql#L30</a><br>Documentation about that can be found here:<br><a href="https://www.postgresql.org/docs/12/datatype-numeric.html" target="_blank">https://www.postgresql.org/docs/12/datatype-numeric.html</a></span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div><div><div><p class=MsoNormal><span style='font-family:"Courier New"'>In another case I had to resolve floating point comparison internally with:<br><a href="https://github.com/pgRouting/pgrouting/blob/main/src/common/xy_vertex.cpp#L36" target="_blank">https://github.com/pgRouting/pgrouting/blob/main/src/common/xy_vertex.cpp#L36</a></span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><p class=MsoNormal><span style='font-family:"Courier New";color:black;background:white'>Which I got from here:<br><a href="https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon" target="_blank">https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon</a></span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>Allways keep in mind floating point </span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>Remember for example that:</span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>mathematically: 1 == 1/3 + 1/3 + 1/3</span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>But computationally: 1 != 1/3 + 1/3 + 1/3</span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>The reason is floating point</span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>I like this article</span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'><a href="https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/" target="_blank">https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/</a></span><span style='font-family:"Arial",sans-serif'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Sun, Aug 22, 2021 at 7:56 AM Esteban Zimanyi <<a href="mailto:estebanzimanyi@gmail.com" target="_blank">estebanzimanyi@gmail.com</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><p class=MsoNormal>Dear Vicky and Regina<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Following the recommendations we received at the PostGIS Dev meeting this August 20, I started to experiment the embedding of liblwgeom from PostGIS 3.1.3 inside MobilityDB. I was able to run the MobilityDB tests but obviously things have changed from versions 2.5.5 to 3.1.3. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>You will find enclosed a diff of the results of one of the tests. As you can see there are two types of differences. The first one concerns a very small floating point precision difference, e.g.,<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> SELECT ST_AsText(trajectory(tnpoint 'Npoint(1, 0.5)@2000-01-01'));<br>-                 st_astext                  <br>---------------------------------------------<br>- POINT(48.71866291282778 77.76407051015086)<br>+                st_astext                 <br>+------------------------------------------<br>+ POINT(48.7186629128278 77.7640705101509)<br> (1 row)<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Another type of error concerns deprecated functions<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal> SELECT setPrecision(atGeometry(tnpoint '{Npoint(1, 0.3)@2000-01-01, Npoint(1, 0.5)@2000-01-02, Npoint(1, 0.5)@2000-01-03}', geometry 'SRID=5676;Polygon((50 50,50 100,100 100,100 50,50 50))'), 6);<br>-ERROR<br>-DETAIL:  Library function 'intersects' was deprecated in PostGIS 3.0.0<br>-HINT:  Consider running: SELECT postgis_extensions_upgrade()<br>+              setprecision              <br>+----------------------------------------<br>+ {NPoint(1,0.3)@2000-01-01 00:00:00+00}<br>+(1 row)<br>+<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>In the forthcoming days I will be modifying the develop branch so that the tests can be run in both versions PostGIS 2.5.5 and 3.1.3.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Furthermore, as a consequence of the problem I reported on the ticket<o:p></o:p></p></div><div><p class=MsoNormal><a href="https://trac.osgeo.org/postgis/ticket/4979#comment:5" target="_blank">https://trac.osgeo.org/postgis/ticket/4979#comment:5</a><o:p></o:p></p></div><div><p class=MsoNormal>it is not possible to mix PostGIS 2.5.5 and 3.1.3 (e.g., use liblwgeom.so from PostGIS 2.5.5 with PostGIS 3.1.3 which was one of the tests planned) since all the lwgeom struct definitions have been changed.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Regards<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Esteban<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>------------------------------------------------------------<o:p></o:p></p></div><div><div><div><div><div><p class=MsoNormal>Prof. Esteban Zimanyi<br>Department of Computer & Decision Engineering  (CoDE) CP 165/15    <br>Universite Libre de Bruxelles            <br>Avenue F. D. Roosevelt 50                <br>B-1050 Brussels, Belgium                 <br>fax: + 32.2.650.47.13<br>tel: + 32.2.650.31.85<br>e-mail: <a href="mailto:esteban.zimanyi@ulb.be" target="_blank">esteban.zimanyi@ulb.be</a><br>Internet: <a href="http://cs.ulb.ac.be/members/esteban/" target="_blank">http://cs.ulb.ac.be/members/esteban/</a><br>------------------------------------------------------------<o:p></o:p></p></div></div></div></div></div></div></blockquote></div><p class=MsoNormal><br clear=all><br>-- <o:p></o:p></p><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><pre>Georepublic UG (haftungsbeschränkt)<o:p></o:p></pre><pre>Salzmannstraße 44, <o:p></o:p></pre><pre>81739 München, Germany<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Vicky Vergara<o:p></o:p></pre><pre>Operations Research<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>eMail: vicky@<a href="http://georepublic.de" target="_blank">georepublic.de</a><o:p></o:p></pre><pre>Web: <a href="https://georepublic.info" target="_blank">https://georepublic.info</a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Tel: +49 (089) 4161 7698-1<o:p></o:p></pre><pre>Fax: +49 (089) 4161 7698-9<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Commercial register: Amtsgericht München, HRB 181428<o:p></o:p></pre><pre>CEO: Daniel Kastl<o:p></o:p></pre><pre><o:p> </o:p></pre></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote></div></div></div></body></html>