Comment #0 by bearophile_hugs — 2010-04-21T14:01:40Z
This D2 code works with dmd 2.043, it shows that foreach accepts floating point extrema too.
But I think it's safer/tidier to accept only ranges with integral extrema (in Python too the range/xrange expects integers). FP approximations can cause problems here.
import std.stdio;
import std.math: nextUp;
void main() {
foreach(i; 2.1 .. 4.10001) {
writeln(typeid(typeof(i))); // Output: double
break;
}
foreach(i; 2.1 .. nextUp(4.1))
write(i, " "); // Output: 2.1 3.1 4.1
}
Comment #1 by bearophile_hugs — 2010-04-22T02:09:06Z
Aelxx (aelxx at yandex dot ru) suggests:
I'd like MATLAB style more:
foreach (f; linspace (0.0, 1.0, 100))
{...}
here f gets values 0, 0.0101.., 0.0202..., ..., 0.98989..., 1.0
foreach (f; logspace (1.0, 1e6, 7))
{...}
here f gets values 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6.
------------------------
My answer:
Phobos has iota() that's similar to what you ask, a FP version is easy to create. With iota even the current interval syntax becomes less useful.
See also bug 4112.
Comment #2 by johannes.loher — 2018-05-05T11:59:34Z
This still works as of 2.080.0 and the spec indeed does not state that only integral extrema are allowed. This is legal code at the moment. I'll tag this as enhancement.
Comment #3 by razvan.nitu1305 — 2022-03-22T12:50:49Z
This issue has been filled a long time ago and there were no other complaints. Since it is possible that code in the wild uses this feature (in spite of FP approximations), I see no point in dissallowing it.