On Sun, 16 Jul 2006 19:06:02 +0300 Andrius Aštrauskas <[EMAIL PROTECTED]> wrote:
> On Sun, 16 Jul 2006 17:11:50 +0200 > "Henrik Sundberg" <[EMAIL PROTECTED]> wrote: > > > 2006/7/16, Henrik Sundberg <[EMAIL PROTECTED]>: > > > 2006/7/16, Andy Pepperdine <[EMAIL PROTECTED]>: > > > > On Sunday 16 July 2006 06:48, Andrius Aštrauskas wrote: > > > > > On Fri, 14 Jul 2006 13:32:45 +0200 > > > > > > > > > > Jurgen Stigter <[EMAIL PROTECTED]> wrote: > > > > > > /I am using version 2.0 of OpenOffice.org. My problem is :/ > > > > > > > > > > > > The MOD function is returning -512 instead of 0 (though each > > > > > > of the factors is divisable by 23): > > > > > > MOD (9951585559 *370469809;23) results in -512, but when I > > > > > > copy the formula and put it in another cell, the result is > > > > > > -320 while > > > > > > MOD (9951585559;23) results in 0 > > > > > > MOD (370469809;23) results 0 > > > > > > > > This is almost certainly due to an integer overflow. There will > > > > be a limit to the size of exact integer values. I don't know how > > > > big they can be; perhaps someone else can say. > > > > > > log2 (9951585559) => 33.21 bits > > > log2(370469809) => 28.46 bits > > > > > > The product needs 61.68 bits, less than 63 (one taken by the > > > sign). I.e. 64 bit arithmetics ought to work. > > > > > > both MOD (9951585559 *370469809;23) and MOD ((9951585559 > > > *370469809)-1;23) gives the result 0 for me (XP, OOO 2.03), > > > implying overflow. But why? > > > > > > MOD (9951585559-1;23) gives 22, so it works for more than 32 bits. > > > > > > Are the integers handled as float numbers when they are big > > > enough? 9951585559 *370469809 is displayed as 3,69E+018, implying > > > this and making sense to the result. > > > > I tried a little more, by making a table in calc. > > X 2^X =MOD(2^X;23)-MOD(2^X-1;23) > > =(2^X+1)-(2^X) 47 140737488355328 > > 1 1 48 > > 281474976710656 1 0 > > 49 562949953421312 > > 1 0 50 > > 1,13E+015 1 0 > > 51 2,25E+015 > > 1 0 52 > > 4,50E+015 0 0 > > 53 9,01E+015 > > 0 0 > > > > The third column indicates that 64-bit float values are used. I.e. > > With a 52-bit mantissa according to: > > http://en.wikipedia.org/wiki/IEEE_floating-point_standard > > > > The fourth column indicates that something is wrong. > > > > I think that numeral values always are represented as double > > precision float values and therefore that integer values above > > ~2^52 are meaningless. > > > > My table indicates that integer values above 2^47 does not work. > > This might be a bug. > > At least you know upgrade will not help :-). > On 2.0.3 your table gives the same results. Sorry - deleted a part of text accidentaly. By the way, the largest integer I can enter in a cell is 999999999999997; 999999999999998 and 999999999999999 both result in 1000000000000000, and when I double-click the cell (to copy the 15 zeros), it shows 1E+015, and after pressing Return there appear 1000000000000000 again :-) Andrius > > > > > > > In this particular case, you can rewrite the formula because: > > > > a*b (mod p) = a (mod p) * b (mod p) > > > > > > Not really. Max(a*b (mod p))=p-1; Max(a (mod p) * b (mod > > > p))=(p-1)**2. (a (mod p) * b (mod p)) (mod p) might work. > > > > /$ > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
