--- Comment #5 from Don <> 2011-03-23 06:57:19 PDT ---
(In reply to comment #4)
> (In reply to comment #3)
> > The thing I'm really worried about is this:
> > BigInt a, b, c;
> > 
> > a = (a ^^ b) % c;
> > This is an attempt to do modular exponentiation, which comes up frequently 
> > in
> > cryptography. The code is mathematically correct, but completely wrong in
> > practice.

> I suggest to add a similar function to std.math or std.bigint. 

Of course, that's what I was implying. Note that it is a totally different
operation to ^^.

> Also the D
> compiler may recognize the (x^^y)%z pattern and replace it with a power mod
> function call.

I think that's asking too much. 
Also note that it doesn't cover the two step pattern where someone does:
x = x ^^ y ;
x %= z;

 > > So I would rather give an informative static assert for the BigInt ^^
> > case.
> Python allows you to use the power/shift with multi-precision numbers too, if
> you want. The multi-precision numbers can be used transparently, syntax-wise. 
> If you have D templated code that you want to use with both BigInt and int you
> will have to use a static if to change the code from x^^y to
> BigInt(x)^^y.toInt() (or call a little pow template function that does the
> same, losing infix operator syntax again), this isn't good. 

That's a false consistency. T ^^ int  is the common operation, not T ^^ T.
Really. BigInt ^^ BigInt isn't a BigInt. It's too big to be representable.

> BitInt are meant to
> work as integers, mostly. I'd like a D program to work with as few changes as
> possible if I replace int with BigInts or BigInts with ints (in some 
> situations
> I may write the code with BigInts, see the results and then try to write the
> same with ints/longs, to spot the overflows).

So? These ones which currently don't compile, will definitely cause problems
with ints/longs as well. You're just getting the error message at compile time
rather than at run time.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to