comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Numerical calculations: Why not use fixed point types for everything?
Date: Mon, 4 Feb 2013 20:27:58 -0600
Date: 2013-02-04T20:27:58-06:00	[thread overview]
Message-ID: <kepqng$b08$1@munin.nbi.dk> (raw)
In-Reply-To: c81e7d23-8757-4a81-9ca2-d540afe0d819@googlegroups.com

"Ada novice" <shai.lesh@gmx.com> wrote in message 
news:c81e7d23-8757-4a81-9ca2-d540afe0d819@googlegroups.com...
On Saturday, February 2, 2013 10:08:50 PM UTC+1, Nasser M. Abbasi wrote:

>>
>> Well, it is common only in sloppy programming.
>>
>>
>>
>> loop counters should always be discrete. as in integers,

>I do not think we should judge things too quickly.

I tend to agree with you in general, but your example seems to demostrate 
the OPs point...

>By having a "delta" that we can explicitly specify, this can make the code 
>simpler to understand. Look at this code:
>
>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
         -- else, this might not work, but it does in this example.
>       Frequency := Frequency_Start + Frequency_Step * Long_Float (I - 1);
       Frequency := Frequency_Start + Frequency_Step * Long_Float (I);
>       if I = 2 then
      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? One the huge 
benefits of
    -- Ada is that you don't have to start every range at 0 or 1 - do 
whatever your
    -- program needs.
>   end loop;
>    Put_Line ("Count after loop is" & Integer'Image (Count));
    -- Unless your program is *really* buggy, this is just the constant 
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.)

                                                             Randy.






  reply	other threads:[~2013-02-05  2:27 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 [this message]
2013-02-06  7:11                 ` Ada novice
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