Don wrote:
Michiel Helvensteijn wrote:
Andrei Alexandrescu wrote:

void main()
{
     foreach_reverse (i; 0.7 .. 100.7)
     {
         write(i, " ");
     }
}

The last number printed is -0.3.

A question if I may.

Why does D allow iteration over an interval of floats? A floating point
number has no direct successor or predecessor. Any such interval would
contain zero, one or infinite elements.

Given the -0.3, I'm assuming you increase/decrease by 1.0 each iteration. Is
this useful enough to be the standard behavior?


It's a petri dish. Perfect breeding ground for bugs.

real BIG = 2.0 /(real.epsilon);

foreach(i; BIG .. BIG + 2) {
  ...
}

Infinite loop, since BIG + 1 == BIG.


It's also inconsistent:

  foreach (e; range)      // Iterate over *all* elements in range
  foreach (i; 0..10)      // Iterate over *all* integers from 0 to 9
  foreach (f; 0.0..10.0)  // Iterate over a small subset of
                             floating-point numbers between 0 and 10

-Lars

Reply via email to