Evaluating a Num Linearly Spaced Intervals
We are frequently confronted with evaluating a mathematical expression at Num
linearly spaced equidistant intervals.
Consider the following example;
float start_time, end_time, y;
int n, num=100;
... /* start_time and end_time set to values by user */
for(n=0; n<=num; n++)
{
t = start_time + (end_time - start_time) *n / num; /* ****** */
y = calculation(t); /* evaluate some kind of expression */
printf("%f\t%f\n", y, t);
}
Note how a simple index is used to painlessly determine num+1 equally spaced
points. In this case, 100 intervals; 101 points.
It is important that you understand the line marked thus /******/.
Also, note that the order is important. In the above, (end_time -
start_time) is a float. Thus, (end_time - start_time) * n is a float (as a
float times an int is a float). Thus, (end_time - start_time) * n / num is a
float and all is well.
The following might look the same, but it isn't and will not work as desired.
t = start_time + n/num* (end_time - start_time);
In this case n/num (an integer divided by an integer) is zero for n=0..99.
Thus, t will always be start_time + 0.0, which isn't too useful.
However, the following will work.
t = start_time + ((float) n)/num* (end_time - start_time);
Note that n is type cast as a float. A float divided by an int is a float.
Again, all is well.