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