Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Ada > Re: Epsilon
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 4 Topic 5695 of 5828
Post > Topic >>

Re: Epsilon

by Stephen Leake <Stephe.Leake@[EMAIL PROTECTED] > May 13, 2008 at 07:42 AM

<adaworks@[EMAIL PROTECTED]
> 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@[EMAIL PROTECTED]
   --  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
 




 4 Posts in Topic:
Epsilon
<adaworks@[EMAIL PROTE  2008-05-12 07:56:08 
Re: Epsilon
Stephen Leake <Stephe.  2008-05-13 07:42:35 
Re: Epsilon
<adaworks@[EMAIL PROTE  2008-05-13 18:02:05 
Re: Epsilon
Stephen Leake <Stephe.  2008-05-14 05:58:29 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Thu Jul 24 14:39:26 CDT 2008.