From: | Chadwick Boggs <chadwickboggs(at)yahoo(dot)com> |
---|---|
To: | Bruno Wolff III <bruno(at)wolff(dot)to> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Arbitrary precision modulo operation |
Date: | 2004-04-26 17:30:17 |
Message-ID: | 408D4729.303@yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Example of wrong results from modulo operation of arbitrary precision
numbers:
# select '123456789012345678901234567890'::numeric % 123;
?column?
----------
-6
(1 row)
# select mod('123456789012345678901234567890'::numeric, 123);
mod
-----
-6
(1 row)
The correct result (at least according to another, unnamed, RDBMS):
> select '123456789012345678901234567890' % 123;
+----------------------------------------+
| '123456789012345678901234567890' % 123 |
+----------------------------------------+
| 58 |
+----------------------------------------+
1 row in set (0.00 sec)
Bruno Wolff III wrote:
>On Mon, Apr 26, 2004 at 10:18:52 -0400,
> Chadwick Boggs <chadwickboggs(at)yahoo(dot)com> wrote:
>
>
>>I need to perform modulo operations on extremely large numbers. The %
>>operator is giving me number out of range errors and the mod(x, y)
>>function simply seems to return the wrong results. Also, my numerator
>>is in the format of a quoted string, which the mod function can't take.
>>
>>
>
>How large is extremely large?
>You can cast the strings to a numeric type to solve the string problem.
>'numeric' should work for numbers up to about 1000 digits.
>For example:
>area=> select '1234567890'::numeric % '123'::numeric;
> ?column?
>----------
> 39
>(1 row)
>
>If you are getting wrong results you should post a specific example so
>that the developers can figure out what is going wrong.
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | David Garamond | 2004-04-26 17:36:33 | Re: shadowing (like IB/Firebird) |
Previous Message | Bruno Wolff III | 2004-04-26 17:23:37 | Re: Arbitrary precision modulo operation |