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-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,9a4dadd62f24335b X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 1995-02-25 21:38:02 PST Path: nntp.gmd.de!news.rwth-aachen.de!news.rhrz.uni-bonn.de!news.uni-stuttgart.de!rz.uni-karlsruhe.de!xlink.net!howland.reston.ans.net!news.sprintlink.net!news.clark.net!hirasuna.clark.net!user From: hirasuna@acm.org (Michael Hirasuna) Newsgroups: comp.lang.ada Subject: Re: floats to integers? Date: Sat, 25 Feb 1995 09:21:59 -0500 Organization: Clark Internet Services, Inc. Message-ID: References: <3i2gbu$56r@sanson.dit.upm.es> <3ie7je$dd9@newsbf02.news.aol.com> NNTP-Posting-Host: hirasuna.clark.net Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Date: 1995-02-25T09:21:59-05:00 List-Id: In article , eachus@spectre.mitre.org (Robert I. Eachus) wrote: > Hmmm... If you want to always return a valid answer when possible, > you need to do: > > function Floor (X: in Float) return Integer is > Temp: Integer; > begin > Temp := Integer(X); > if Float(Temp) > X then return Temp - 1; else return Temp; end if; > exception > when others => > if X < Float(Integer'LAST) + 1.0 and X >= Float(Integer'LAST) > then return Integer'LAST; > else raise Constraint_Error; > end if; > end Floor; I receive another solution from Angel Alvarez (aalvarez@goya.eunet.es) if Float(Integer(X)) = X then return Integer(X); else return Integer(X-0.5);end if; At first glance this seems a more brute force approach, but is does avoid the problems of the possible numeric error that may arise from integer substraction. -- Michael Hirasuna | hirasuna@acm.org