From: Hans Marqvardsen <hm@ddre.dk>
Subject: Re: Calculating SQRT in ADA
Date: 1999/03/24
Date: 1999-03-24T00:00:00+00:00 [thread overview]
Message-ID: <36F8C60D.26AA@ddre.dk> (raw)
In-Reply-To: 19990324125518.01416.00000432@ngol08.aol.com
John Herro wrote:
>
> Here's a generic square root routine in Ada 83, taken from my AdaTutor program:
>
> generic
> type Dummy is digits <>;
> function Sqrt(X :in Dummy) return Dummy;
> function Sqrt(X :in Dummy) return Dummy is
> Guess : Dummy := X;
-- insert, just in case the compiler fail to recognize
-- a constant
Tolerance : constant Dummy := 3.0*Dummy'epsilon*X;
> begin
> if X < 0.0 then
> raise Constraint_Error;
> end if;
> while X /= 0.0 and then
> abs(Guess*Guess/X - 1.0) > 3.0*Dummy'Epsilon loop
-- replace the above with simpler and faster:
while (Guess*Guess - X) > tolerance loop
> Guess := (X/Guess + Guess) * 0.5;
> end loop;
> return Guess;
> end Sqrt;
>
> I tested this routine with Vax Ada 83, which has types Float, Long_Float, and
> Long_Long_Float. That last type gives at least 33 decimal digits of precision.
> I instantiated this function, as well as Text_IO.Float_IO, for all three
> types. When I tested with the three types, all displayed digits of the answers
> were correct. I hereby place this long and complex function :-) into the
> public domain. Enjoy.
> - John Herro
> You can download a shareware AdaTutor program at
> http://members.aol.com/AdaTutor
Bravo, amazing that it is this simple to find a Square root
efficiently!
A few questions out of general interest:
Where doest the multiplier 3.0 come from ?
Cant you make the routine even simpler and faster,
multiplying with X, after having established that X is
not-negative?
(At the same time avoiding a division
and the need to test for X=0.0?)
Do you really need to use abs ?
(Isn't always Guess >= 'true sqrt' anyway?)
Sincerely,
Hans Marqvardsen
next prev parent reply other threads:[~1999-03-24 0:00 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-03-24 0:00 Calculating SQRT in ADA cmcrae
1999-03-23 0:00 ` Chris Morgan
1999-03-24 0:00 ` Marin David Condic
[not found] ` <36F913E0.75F51763@lmco.com>
1999-03-24 0:00 ` John Herro
1999-03-24 0:00 ` Hans Marqvardsen [this message]
[not found] ` <36FAA3DF.42C31CF@lmco.com>
1999-03-26 0:00 ` Tom Moran
1999-03-25 0:00 ` robert_dewar
1999-03-25 0:00 ` John Herro
1999-03-24 0:00 ` Hans Marqvardsen
1999-03-25 0:00 ` David C. Hoos, Sr.
1999-03-25 0:00 ` robert_dewar
1999-03-25 0:00 ` David C. Hoos, Sr.
1999-03-26 0:00 ` Howard W. LUDWIG
1999-03-26 0:00 ` Ole-Hjalmar Kristensen
1999-03-27 0:00 ` robert_dewar
1999-03-29 0:00 ` Robert I. Eachus
1999-03-30 0:00 ` robert_dewar
1999-04-02 0:00 ` Robert I. Eachus
1999-03-30 0:00 ` robert_dewar
1999-04-02 0:00 ` Robert I. Eachus
1999-04-03 0:00 ` robert_dewar
1999-03-25 0:00 ` robert_dewar
1999-03-26 0:00 ` Calculating SQRT in Ada John Herro
1999-03-26 0:00 ` David C. Hoos, Sr.
1999-03-26 0:00 ` John Herro
1999-03-25 0:00 ` Calculating SQRT in ADA robert_dewar
1999-03-24 0:00 ` Ada 83 - Sometimes still chosen Richard D Riehle
1999-03-25 0:00 ` robert_dewar
1999-03-25 0:00 ` Richard D Riehle
1999-03-25 0:00 ` Marin David Condic
1999-03-26 0:00 ` robert_dewar
1999-03-25 0:00 ` robert_dewar
1999-03-25 0:00 ` Richard D Riehle
1999-03-25 0:00 ` Larry Kilgallen
1999-03-26 0:00 ` robert_dewar
1999-03-26 0:00 ` Tarjei Tj�stheim Jensen
1999-03-27 0:00 ` robert_dewar
1999-03-27 0:00 ` Tarjei Tj�stheim Jensen
1999-03-26 0:00 ` Richard D Riehle
1999-03-26 0:00 ` Tom Moran
1999-03-26 0:00 ` Larry Kilgallen
1999-03-29 0:00 ` Marin David Condic
1999-03-29 0:00 ` Tarjei Tj�stheim Jensen
1999-03-27 0:00 ` Matthew Heaney
1999-03-26 0:00 ` Tom Moran
1999-03-25 0:00 ` Calculating SQRT in ADA robert_dewar
1999-03-24 0:00 ` Howard W. LUDWIG
1999-03-25 0:00 ` Larry Kilgallen
1999-03-24 0:00 ` bob
1999-03-24 0:00 ` Niklas Holsti
1999-03-26 0:00 ` als0045
1999-03-26 0:00 ` als0045
1999-03-26 0:00 ` bob
1999-03-26 0:00 ` Marin David Condic
1999-03-26 0:00 ` David C. Hoos, Sr.
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox