|
Message-ID: <20110626183344.GX12592@brightrain.aerifal.cx> Date: Sun, 26 Jun 2011 14:33:44 -0400 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: math argument reduction On Sun, Jun 26, 2011 at 08:04:02PM +0200, Szabolcs Nagy wrote: > dalias, i thought about the simple argument reduction method > you proposed on irc, imho it won't be that good > > the task is to calculate X mod M, so to get the fractional part of > x = X/M > you said you would treat X as a sum (of 2^n terms) let's say > X = A+B > and assume we have precalculated a=A/M and b=B/M in a table, then > x = a+b > is easy to get > > but it well might be that the form of a+b is > > [..]1011 . 0000000000000001101011[..] > > so the fractional part has many leading zeros > (it can be as many as 61) so you need to store a and b > with large precision to get good floating point representation > of the fractional part > (53 + 61 bits precision + some extra bits for rounding) > > so you need to store and do arithmetics with 120bit fixpoint values I think you misunderstood my algorithm. You never need to compute X/M. It's A%M and B%M, not A/M and B/M, which you have precalculated in your tables. And therefore, (A+B)%M is congruent to A%M + B%M. In general it could be outside the interval [0,M), but not by so much that it's hard to get a good answer. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.