Do you like bounded integrals?
tsbockman via Digitalmars-d
digitalmars-d at puremagic.com
Tue Aug 30 13:38:49 PDT 2016
On Tuesday, 30 August 2016 at 14:58:16 UTC, Chris Wright wrote:
> We can only track types, not values, and that strongly hampers
> our ability to reduce ranges.
Playing with some examples, I think the real issue is that
precise bounds tracking requires analyzing the formula as a
whole, rather than just each operation individually:
auto blend(
Bound!(int, 0, 100) x,
Bound!(int, 0, 100) y,
Bound!(int, 0, 100) z)
{
enum Bound!(int, 100, 100) h = 100;
return ((x * z) + (y * (h - z))) / h;
}
With propagation computed at the individual operation level, the
above returns a `Bound!(int, 0, 200)`. But, using the expression
as a whole it can easily be proven that the true maximum is `100`.
(With just-plain-wrong "union of the input ranges" propagation,
the above will generate many spurious exceptions.)
Unfortunately, proving the true bounds statically in the general
case would require something like a compile-time computer algebra
system connected combined with AST macros. That's obviously
overkill for what we're doing here.
More information about the Digitalmars-d
mailing list