comp.lang.ada
 help / color / mirror / Atom feed
From: Florian Weimer <fw@deneb.enyo.de>
Subject: Re: Modular type (Re: Large numbers)
Date: 15 Mar 2001 11:58:58 +0100
Date: 2001-03-15T11:58:58+01:00	[thread overview]
Message-ID: <87itlbnvrh.fsf@deneb.enyo.de> (raw)
In-Reply-To: slrn9b0vik.243.georg@apal.ii.uib.no

georg@ii.uib.no (Hans Georg Schaathun) writes:

> If I remember correctly, that is NP-hard; though that does not really
> matter since our numbers are bounded to 32 bits.  I was rather disappointed
> to see that Ada does division completely wrong (it would be better not to
> do it at all).  What is the best way to do division?  A linear search for
> the inverse requires 2*10^9 multiplications, which is about as many as
> required for all the rest of the problem.  Is this really the preferred
> algorithm?

If you want to calculate the inverse of $x \in (\Z/n\Z)^\times$,
you  can use that $x^{\phi(n)}$ equals $1$, so you need only
$O(\log \phi (n))$ operations.  (To calculate $\phi(n)$, you need the
factorization of $n$, which is quite expensive, but needed only once).

IMHO, the Ada way of division is a bit strange, especially for prime
moduli.  OTOH, at least in the binary modulus case, dividing by zero
divisors (e.g. powers of two) is very common, so the Z/nZ approach
fails in this area.  This confusion could have been avoid only if
non-binary moduli were not in included in the language.

> 2) Dynamic modulus.
> Is it in any way possible to choose the modulus for a modular type 
> runtime, e.g. by parameter to the program?

No, there isn't.  The modulus has to be a static expression (which is
a stronger requirement then a compile-time constant).



  reply	other threads:[~2001-03-15 10:58 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-09 18:58 Large numbers (or is Ada the choice for me?) Hans Georg Schaathun
2001-03-09 19:35 ` Marin David Condic
2001-03-09 20:44   ` David Starner
2001-03-09 23:12     ` Marin David Condic
2001-03-10  2:56       ` David Starner
2001-03-10 11:37         ` Florian Weimer
2001-03-10  6:08       ` tmoran
2001-03-09 21:01   ` Randy Brukardt
2001-03-09 23:02   ` Robert A Duff
2001-03-09 23:28     ` Marin David Condic
2001-03-10 16:49       ` Hans Georg Schaathun
2001-03-10 11:59   ` Jeffrey Carter
2001-03-09 20:37 ` Brian Catlin
2001-03-09 21:26 ` JP Thornley
2001-03-09 21:59 ` Tucker Taft
2001-03-15  8:33   ` Modular type (Re: Large numbers) Hans Georg Schaathun
2001-03-15 10:58     ` Florian Weimer [this message]
2001-03-15 11:12       ` Hans Georg Schaathun
2001-03-15 16:24         ` Tucker Taft
2001-03-10  1:42 ` Large numbers (or is Ada the choice for me?) Keith Thompson
2001-03-19 20:48 ` Robert I. Eachus
2001-03-20  3:33   ` Brian Rogoff
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox