From: Ada novice <shai.lesh@gmx.com>
Subject: Re: Numerical calculations: Why not use fixed point types for everything?
Date: Tue, 5 Feb 2013 23:11:43 -0800 (PST)
Date: 2013-02-05T23:11:43-08:00 [thread overview]
Message-ID: <4b654b06-f2d2-4ced-8508-c10e5c84e29d@googlegroups.com> (raw)
In-Reply-To: <kepqng$b08$1@munin.nbi.dk>
On Tuesday, February 5, 2013 3:27:58 AM UTC+1, Randy Brukardt wrote:
>
> >with Ada.Text_IO; use Ada.Text_IO;
>
> >with Ada.Long_Float_Text_IO; use Ada.Long_Float_Text_IO;
>
> >
>
> >procedure Step_Freq is
>
> > Count : Integer;
>
> > Frequency : Long_Float;
>
> > Frequency_Start : constant := -44.88;
>
> > Frequency_Step : constant := (67.32 - Frequency_Start) / 299.0;
>
>
>
> This 299 seems related to the one in the loop below. As such, I think it
>
> should have a named constant:
>
> Steps : constant := 300;
>
> Frequency_Step : constant := (67.32 - Frequency_Start) / (Steps-1);
>
> [Aside: This is legal even though the denominator is integer because of the
>
> extra operators defined in 4.5.5(17). And examples like this is why.]
>
>
>
> > Delta_Frequency : Long_Float;
>
> >
>
> > begin
>
> > Count := 0;
>
> > Frequency := Frequency_Start;
>
> > for I in 1..300 loop
>
> for I in 0 .. Step-1 loop
>
> -- This avoids the odd "-1" in the loop below. If you had directly
>
> used I somewhere
>
Yes this is correct. Your code is a good alternative of mine.
>
> if I = 1 then
>
> > Delta_Frequency := abs(Frequency - Frequency_Start);
>
> > Put (Item => Delta_Frequency, Fore => 3, Aft => 5, Exp => 0);
>
> > Put(" ");
>
> > Put (Item => Frequency_Step, Fore => 3, Aft => 5, Exp => 0);
>
> > New_Line;
>
> > end if;
>
> > Count := Count + 1;
>
> --?? Besides the fact that this isn't even used in the loop, it has the
>
> same value as I
>
> -- (or I-1 in the original code). Why duplicate the value?
Well I am just outputting the index counter I at the end which is 300. How do you get to output of the end value of the index counter otherwise?
> > Put_Line ("Count after loop is" & Integer'Image (Count));
>
> -- Unless your program is *really* buggy, this is just the constant
Yes I know. See my answer above.
>
> Step.
>
> > New_Line;
>
> > Put (Item => Frequency, Fore => 3, Aft => 3, Exp => 0);
>
> >end Step_Freq;
>
> >
>
> >Well, I am using a discrete loop counter. But is this the best way to go
>
> >about for such
>
> >a simple example? What if I want the Frequency_Step to take a specific
>
> >value? Then
>
> >I will have perhaps to play with the range and the amount of discrete
>
> >points I need in
>
> >order to arrive at a desired Frequency_Step in the code.
>
>
>
> Nah, all you need to do is make the Step value calculated from the
>
> Frequency_Step, rather than the reverse.
>
>
>
> >So why not use fixed-point for the frequency as we know exactly what step
>
> >we want?
>
>
>
> The main reason is that you almost always need to get your data from an
>
> array somewhere, and you use the for loop parameter ("I" in this case) to
>
> get the values from the array, and then use the float version of the step
>
> for the calculation. With the exception of benchmarks, I don't think I've
>
> ever written a loop that does exactly the same thing 300 times without
>
> changing the input data. (When such things appear to happen, usually you can
>
> refactor the expression to avoid the loop altogether, which is usually 300
>
> times faster.)
>
In this example, Frequency is changing at every index in the loop. Its first value is -44.88 and its final value is 67.32. This Frequency can be used further in a calculation.
If you would have read the code well, you would have seen that the loop is not doing 300 times exactly the same thing.
Thanks
YC
next prev parent reply other threads:[~2013-02-06 7:11 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-17 10:33 Numerical calculations: Why not use fixed point types for everything? Ada novice
2013-01-17 14:40 ` Nasser M. Abbasi
2013-01-17 16:16 ` Adam Beneschan
2013-01-17 17:00 ` Georg Bauhaus
2013-01-17 16:25 ` Adam Beneschan
2013-01-18 9:17 ` Ada novice
2013-01-18 17:24 ` J-P. Rosen
2013-01-18 17:52 ` Jeffrey Carter
2013-01-18 18:15 ` Dennis Lee Bieber
2013-01-18 18:59 ` Adam Beneschan
2013-01-19 4:41 ` Dennis Lee Bieber
2013-01-19 6:26 ` Jeffrey Carter
2013-01-19 14:14 ` Robert A Duff
2013-01-25 12:16 ` Paul Colin Gloster
2013-01-24 10:55 ` Ada novice
2013-01-24 11:47 ` Simon Wright
2013-01-24 14:21 ` Ada novice
2013-01-20 0:05 ` Robin Vowels
2013-01-18 23:06 ` Robin Vowels
2013-01-18 19:09 ` Adam Beneschan
2013-01-18 21:39 ` Randy Brukardt
2013-01-19 7:02 ` Ada novice
2013-01-25 12:09 ` Paul Colin Gloster
2013-01-25 12:23 ` Paul Colin Gloster
2013-01-28 9:09 ` Ada novice
2013-02-01 10:53 ` Ada novice
2013-02-01 15:01 ` Shark8
2013-02-02 18:55 ` Ada novice
2013-02-03 4:05 ` Shark8
2013-02-04 6:23 ` Ada novice
2013-02-04 6:43 ` Niklas Holsti
2013-02-04 7:27 ` Ada novice
2013-02-04 9:37 ` Niklas Holsti
2013-02-04 10:09 ` Ada novice
2013-02-04 14:24 ` Niklas Holsti
2013-02-04 16:44 ` Jeffrey Carter
2013-02-04 21:12 ` Niklas Holsti
2013-02-04 17:31 ` Robert A Duff
2013-02-04 21:20 ` Niklas Holsti
2013-02-02 21:08 ` Nasser M. Abbasi
2013-02-04 6:17 ` Ada novice
2013-02-05 2:27 ` Randy Brukardt
2013-02-06 7:11 ` Ada novice [this message]
2013-02-07 6:03 ` Randy Brukardt
2013-02-07 8:43 ` Shark8
2013-02-08 3:17 ` Randy Brukardt
2013-02-08 6:20 ` Ada novice
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox