[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