NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Re: [netcdf-java] Question on GRIB GDS values precision (float) on computations

  • To: John Caron <caron@xxxxxxxx>
  • Subject: Re: [netcdf-java] Question on GRIB GDS values precision (float) on computations
  • From: Christian Ward-Garrison <cwardgar@xxxxxxxx>
  • Date: Tue, 21 Apr 2015 09:38:00 -0600
Guava provides a good method for this:

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/math/DoubleMath.html#fuzzyEquals%28double,%20double,%20double%29

On Tue, Apr 21, 2015 at 9:33 AM, John Caron <caron@xxxxxxxx> wrote:

> No, that is exact. More like ucar.nc2.Misc
>
> public static boolean closeEnough(float v1, float v2, float maxRelDiff)
> {
>     if(Float.isNaN(v1) && Float.isNaN(v2)) return true;
>     if(Float.isNaN(v1) || Float.isNaN(v2)) return false;   // prob not needed
>
>     float diff = Math.abs(v1 - v2);
>     float largest = Math.max(Math.abs(v1), Math.abs(v2));
>     return diff <= largest * maxRelDiff;
> }
>
>
> see:
>
> http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
>
> http://floating-point-gui.de/errors/comparison/
>
>
> On Tue, Apr 21, 2015 at 9:22 AM, Antonio Rodriges <antonio.rrz@xxxxxxxxx>
> wrote:
>
>> Like
>> Float.compare(a. b) and
>> Double.compare(a, b)
>>
>> 2015-04-21 17:14 GMT+03:00 John Caron <caron@xxxxxxxx>:
>> > ok, and you always have to compare floats with a tolerance, not exact.
>> ive
>> > been bitten many times by that.
>> >
>> > John
>> >
>> > On Tue, Apr 21, 2015 at 8:02 AM, Daniele Romagnoli
>> > <daniele.romagnoli@xxxxxxxxxxxxxxxx> wrote:
>> >>
>> >> Hi John,
>> >> thanks for your reply.
>> >>
>> >> The problem I have with this is that I'm setting up a predefined set of
>> >> custom CoordinateReferenceSystem definitions:
>> >> as an instance, a LambertConformal projection where standard parallels
>> is
>> >> 25.
>> >> Then, I'm parsing the gridMapping attributes in order to try to
>> recognize
>> >> a known custom CRS and I'm getting no matches since it is expecting 25
>> >> instead of 25.00002. (CRS matching checks use WKT parsing).
>> >>
>> >> In the meantime, I will investigate more on this.
>> >> Cheers,
>> >> Daniele
>> >>
>> >>
>> >>
>> >> ==
>> >> GeoServer Professional Services from the experts! Visit
>> >> http://goo.gl/NWWaa2 for more information.
>> >> ==
>> >>
>> >> Ing. Daniele Romagnoli
>> >> Senior Software Engineer
>> >>
>> >> GeoSolutions S.A.S.
>> >> Via Poggio alle Viti 1187
>> >> 55054  Massarosa (LU)
>> >> Italy
>> >> phone: +39 0584 962313
>> >> fax:      +39 0584 1660272
>> >>
>> >> http://www.geo-solutions.it
>> >> http://twitter.com/geosolutions_it
>> >>
>> >> -------------------------------------------------------
>> >>
>> >> AVVERTENZE AI SENSI DEL D.Lgs. 196/2003
>> >>
>> >> Le informazioni contenute in questo messaggio di posta elettronica e/o
>> >> nel/i file/s allegato/i sono da considerarsi strettamente riservate.
>> Il loro
>> >> utilizzo è consentito esclusivamente al destinatario del messaggio,
>> per le
>> >> finalità indicate nel messaggio stesso. Qualora riceviate questo
>> messaggio
>> >> senza esserne il destinatario, Vi preghiamo cortesemente di darcene
>> notizia
>> >> via e-mail e di procedere alla distruzione del messaggio stesso,
>> >> cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
>> divulgarlo
>> >> anche in parte, distribuirlo ad altri soggetti, copiarlo, od
>> utilizzarlo per
>> >> finalità diverse, costituisce comportamento contrario ai principi
>> dettati
>> >> dal D.Lgs. 196/2003.
>> >>
>> >>
>> >>
>> >> The information in this message and/or attachments, is intended solely
>> for
>> >> the attention and use of the named addressee(s) and may be
>> confidential or
>> >> proprietary in nature or covered by the provisions of privacy act
>> >> (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
>> >> Code).Any use not in accord with its purpose, any disclosure,
>> reproduction,
>> >> copying, distribution, or either dissemination, either whole or
>> partial, is
>> >> strictly forbidden except previous formal approval of the named
>> >> addressee(s). If you are not the intended recipient, please contact
>> >> immediately the sender by telephone, fax or e-mail and delete the
>> >> information in this message that has been received in error. The
>> sender does
>> >> not give any warranty or accept liability as the content, accuracy or
>> >> completeness of sent messages and accepts no responsibility  for
>> changes
>> >> made after they were sent or for other risks which arise as a result of
>> >> e-mail transmission, viruses, etc.
>> >>
>> >>
>> >>
>> >> On Tue, Apr 21, 2015 at 2:15 AM, John Caron <caron@xxxxxxxx> wrote:
>> >>>
>> >>> Hi Daniele:
>> >>>
>> >>> GRIB projection info is stored in the GRIB file in (at most) 3 bytes,
>> so
>> >>> has a maximum precision of 24 bits.
>> >>>
>> >>> Im surprised that you are seeing a problem, it seems unlikely that a
>> >>> roundoff in the low order bit of a float should matter.
>> >>>
>> >>> But theres not really a good reason that we couldnt use doubles if
>> >>> needed.
>> >>>
>> >>> John
>> >>>
>> >>>
>> >>> On Mon, Apr 20, 2015 at 3:45 AM, Daniele Romagnoli
>> >>> <daniele.romagnoli@xxxxxxxxxxxxxxxx> wrote:
>> >>>>
>> >>>> Hi List,
>> >>>> I'm using NetCDF Java 4.5.5.
>> >>>> I have noticed that when computing the LambertConformal projection
>> >>>> components (such as latin1, latin2...) in Grib1Gds I'm getting:
>> >>>>
>> >>>> latin1 = 25.00001
>> >>>> latin2 = 25.05002
>> >>>> dx1 = 13.545001
>> >>>> dy1 = 13.545001
>> >>>>
>> >>>> Instead of:
>> >>>> latin1 = 25
>> >>>> latin2 = 25.05
>> >>>> dx1 = 13.545
>> >>>> dy1 = 13.545
>> >>>>
>> >>>> Plus, I'm getting some additional precision loss when extracting
>> these
>> >>>> attributes
>> >>>> from the associated grid_mapping variable, as numbers (double
>> values).
>> >>>> I will surely investigate more on the topic to become more confident
>> >>>> with that code and I will read again about representation errors on
>> floating
>> >>>> point arithmetics so my question could sounds trivial: Why these
>> variables
>> >>>> and scale constants are floats instead of doubles? (is it for size
>> and
>> >>>> performance issues?)
>> >>>>
>> >>>> Regards,
>> >>>> Daniele
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> ==
>> >>>> GeoServer Professional Services from the experts! Visit
>> >>>> http://goo.gl/NWWaa2 for more information.
>> >>>> ==
>> >>>>
>> >>>> Ing. Daniele Romagnoli
>> >>>> Senior Software Engineer
>> >>>>
>> >>>> GeoSolutions S.A.S.
>> >>>> Via Poggio alle Viti 1187
>> >>>> 55054  Massarosa (LU)
>> >>>> Italy
>> >>>> phone: +39 0584 962313
>> >>>> fax:      +39 0584 1660272
>> >>>>
>> >>>> http://www.geo-solutions.it
>> >>>> http://twitter.com/geosolutions_it
>> >>>>
>> >>>> -------------------------------------------------------
>> >>>>
>> >>>> AVVERTENZE AI SENSI DEL D.Lgs. 196/2003
>> >>>>
>> >>>> Le informazioni contenute in questo messaggio di posta elettronica
>> e/o
>> >>>> nel/i file/s allegato/i sono da considerarsi strettamente riservate .
>> Il loro
>> >>>> utilizzo è consentito esclusivamente al destinatario del messaggio,
>> per le
>> >>>> finalità indicate nel messaggio stesso. Qualora riceviate questo
>> messaggio
>> >>>> senza esserne il destinatario, Vi preghiamo cortesemente di darcene
>> notizia
>> >>>> via e-mail e di procedere alla distruzione del messaggio stesso,
>> >>>> cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
>> divulgarlo
>> >>>> anche in parte, distribuirlo ad altri soggetti, copiarlo, od
>> utilizzarlo per
>> >>>> finalità diverse, costituisce comportamento contrario ai principi
>> dettati
>> >>>> dal D.Lgs. 196/2003.
>> >>>>
>> >>>>
>> >>>>
>> >>>> The information in this message and/or attachments, is intended
>> solely
>> >>>> for the attention and use of the named addressee(s) and may be
>> confidential
>> >>>> or proprietary in nature or covered by the provisions of privacy act
>> >>>> (Legislative Decree June, 30 2003, no.196 - Italy's New Data
>> Protection
>> >>>> Code).Any use not in accord with its purpose, any disclosure,
>> reproduction,
>> >>>> copying, distribution, or either dissemination, either whole or
>> partial, is
>> >>>> strictly forbidden except previous formal approval of the named
>> >>>> addressee(s). If you are not the intended recipient, please contact
>> >>>> immediately the sender by telephone, fax or e-mail and delete the
>> >>>> information in this message that has been received in error. The
>> sender does
>> >>>> not give any warranty or accept liability as the content, accuracy or
>> >>>> completeness of sent messages and accepts no responsibility  for
>> changes
>> >>>> made after they were sent or for other risks which arise as a result
>> of
>> >>>> e-mail transmission, viruses, etc.
>> >>>>
>> >>>>
>> >>>>
>> >>>> _______________________________________________
>> >>>> netcdf-java mailing list
>> >>>> netcdf-java@xxxxxxxxxxxxxxxx
>> >>>> For list information or to unsubscribe, visit:
>> >>>> http://www.unidata.ucar.edu/mailing_lists/
>> >>>
>> >>>
>> >>
>> >
>> >
>> > _______________________________________________
>> > netcdf-java mailing list
>> > netcdf-java@xxxxxxxxxxxxxxxx
>> > For list information or to unsubscribe, visit:
>> > http://www.unidata.ucar.edu/mailing_lists/
>>
>
>
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit:
> http://www.unidata.ucar.edu/mailing_lists/
>
  • 2015 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: