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,b2993a94987e380e X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newscon02.news.prodigy.net!prodigy.net!newsdst01.news.prodigy.net!prodigy.com!flpi107.ffdc.sbc.com!flpi148.ffdc.sbc.com.POSTED!4988f22a!not-for-mail From: Newsgroups: comp.lang.ada References: Subject: Re: Epsilon X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.3138 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-RFC2646: Format=Flowed; Original Message-ID: NNTP-Posting-Host: 70.134.78.194 X-Complaints-To: abuse@prodigy.net X-Trace: flpi148.ffdc.sbc.com 1210726808 ST000 70.134.78.194 (Tue, 13 May 2008 21:00:08 EDT) NNTP-Posting-Date: Tue, 13 May 2008 21:00:08 EDT Organization: at&t http://my.att.net/ X-UserInfo1: [[PAPDONTBWQR]TX\ZIBNFXBWR\HPCTL@XT^OBPLAH[\RYIBK^RAQFW[ML\THRCKV^GGZKJMGV^^_JSCFFUA_QXFGVSCYRPILH]TRVKC^LSN@DX_HCAFX__@J\DAJBVMY\ZWZCZLPA^MVH_P@\\EOMW\YSXHG__IJQY_@M[A[[AXQ_XDSTAR]\PG]NVAQUVM Date: Tue, 13 May 2008 18:02:05 -0700 Xref: g2news1.google.com comp.lang.ada:57 Date: 2008-05-13T18:02:05-07:00 List-Id: Stephen, Very clever. Thank you. Richard Riehle ============================================================ "Stephen Leake" wrote in message news:umymuph04.fsf@nasa.gov... > writes: > >> I am looking for some short, practical examples of the Epsilon >> attribute. If you do have some source code examples to post, >> please also send them to my academic email: rdriehle@nps.edu > > -- These values guarantee Integer_16 (value) or Unsigned_16 > -- (value) won't raise Constraint_Error, and allow for maximum > -- round-off error. Useful with Clip_Scale_Limit when result will > -- be converted to Integer_16 or Unsigned_16. > Integer_16_First_Real : constant Real_Type := Real_Type > (Interfaces.Integer_16'First) - 0.5 + > (Real_Type'Epsilon * Real_Type (Interfaces.Integer_16'Last)); > > Integer_16_Last_Real : constant Real_Type := Real_Type > (Interfaces.Integer_16'Last) + 0.5 - > (Real_Type'Epsilon * Real_Type (Interfaces.Integer_16'Last)); > > Unsigned_16_First_Real : constant Real_Type := -0.5 + Real_Type'Epsilon; > Unsigned_16_Last_Real : constant Real_Type := Real_Type > (Interfaces.Unsigned_16'Last) + 0.5 - > (Real_Type'Epsilon * Real_Type (Interfaces.Unsigned_16'Last)); > > > function First_Order_Trig return Real_Type > is begin > return Elementary.Sqrt (Real_Type'Model_Epsilon); > end First_Order_Trig; > > function Half_Trig (Trig : in Trig_Pair_Type) return Trig_Pair_Type > is > -- The result Trig.Cos is >= 0.0. > -- > -- A linear approximation is used when Trig.Sin < > -- First_Order_Trig. this is exact since cos x = 1 - x**2 for > -- this range of x. > begin > if abs Trig.Sin < First_Order_Trig then > -- angle near 0 or Pi. > if Trig.Cos > 0.0 then > -- angle near 0 > return (Trig.Sin / 2.0, 1.0); > else -- angle near Pi > if Trig.Sin >= 0.0 then > return (1.0 - Trig.Sin / 2.0, 0.0); > else > return (-1.0 + Trig.Sin / 2.0, 0.0); > end if; > end if; > else -- angle not near 0 or Pi > if Trig.Sin >= 0.0 then > return (Elementary.Sqrt ((1.0 - Trig.Cos) / 2.0), Elementary.Sqrt > ((1.0 + Trig.Cos) / 2.0)); > else > return (-Elementary.Sqrt ((1.0 - Trig.Cos) / 2.0), Elementary.Sqrt > ((1.0 + Trig.Cos) / 2.0)); > end if; > end if; > end Half_Trig; > > -- > -- Stephe