From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,37e5589e32d8f03f X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!130.59.10.21.MISMATCH!kanaga.switch.ch!switch.ch!newsfeed.inode.at!news.hispeed.ch!linux2.krischik.com!news From: Martin Krischik Newsgroups: comp.lang.ada Subject: Re: Floating-Point Numbers and Internal Representation Date: Sun, 04 Dec 2005 12:12:45 +0100 Organization: Cablecom Newsserver Message-ID: <1843142.NoXPLYbHQs@linux1.krischik.com> References: NNTP-Posting-Host: 84-73-3-231.dclient.hispeed.ch Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit X-Trace: news.hispeed.ch 1133696731 24217 84.73.3.231 (4 Dec 2005 11:45:31 GMT) X-Complaints-To: news@hispeed.ch NNTP-Posting-Date: Sun, 4 Dec 2005 11:45:31 +0000 (UTC) User-Agent: KNode/0.9.2 Xref: g2news1.google.com comp.lang.ada:6734 Date: 2005-12-04T12:12:45+01:00 List-Id: Matthias Kretschmer wrote: > Hello, > > I had a problem in one of my programs, that was caused by the internal > representation of floating-point numbers in the fpu. Concrete: > calculating the value of an optimum for some large number of objects, > then in a second doing something with all optimal objects. The problem > was, that when doing the calculation the second time, the compiler left > the floating-point number in the fpu which had a higher precision than > the representation I choosed, so comparing for equality returns always > "False". The problem would be solved by some operation truncating the > floating-point number to the precision I orginally wanted or used. I > could of course put all the values in an array or list and then finding > optimum and optimal objects, but I don't want to go this way. In C iirc > I could use a volatile variable to ensure the compiler will put the > value in and read from the variable before comparing, but to achieve > something similiar (truncating the precision to that of the type used) > in Ada? Yes it is called "pragma Volatile". > My current solution is to enhance precision to compiler maximum which > seems to be the machine maximum. But I would like to know if there are > any better solutions? Comparting Floatingpoing values in equality is an allways tricky. And I could bet I answered this question before. Independent of CPU/Language used I would allways suggest to use abs (X - Y) < epsilon with a sufficient but not to small epsilon instead. Martin -- mailto://krischik@users.sourceforge.net Ada programming at: http://ada.krischik.com