[Haskell-cafe] Where's the problem ?
Stefan O'Rear
stefanor at cox.net
Wed Jul 4 13:34:59 EDT 2007
On Wed, Jul 04, 2007 at 07:30:55AM -0700, Rome wrote:
> I write a program for fast online multiplication, this means, leading digits
> are computed first, so this program is able to handle real numbers.
>
> My program and Source-Code is available under
> http://www.romeinf04.de http://www.romeinf04.de
>
> but only with german comments, because this is my master thesis.
>
> Now the problem:
> My program computes using the schoenhage-strassen multiply-subroutine the
> output everytime only until the 32777th Digit, but then it holds without an
> error message. Windows Task manager tells me CPU Usage 100% and Memory
> Allocation is increasing.
> Profiling told me, the function Algorithm.resultOfMult is using this memory.
> To compute the 32777th digit, my program needs several digits of the
> input-numbers including the 32800th.
> I'm using GHC 6.6.1 with option -O2 to compile.
>
> Output is row-wise by an IO-function, calling itself recursively with
> updated parameters, hte output looks like:
>
> dig11 dig21 --> res1
> dig12 dig22 --> res2
> dig12 dig23 --> res3
> .
> .
> . and so on
>
> If I use the Naive-Multiply-Subroutine, the problem occurs at the 16392th
> digit.
>
> A friend of mine compiled it under Linux and got:
> .
> .
> .
> 32779 : 1 1 ---32776--> 0
> 32780 : 1 0 ---32777--> -1
> Main: Ix{Integer}.index: Index (32766) out of range ((0,32765))
>
> If I convert every Integer into Int and use instead of the generic list
> functions the prelude-list functions, it works.
> I don't have any idea, where the problem might be...
If you're using the standard Schoenhage-Strassen algorithm, you might
try using (*) on Integer - it uses Schoenhage-Strassen internally and is
already debugged.
Stefan
More information about the Haskell-Cafe
mailing list