
So, for my Algorithms class in grad school we have to calculate some number to as many digits as possible in a minute. I figured this would be a good project to try in multiple languages, to see how they compared in ease and speed. In particular I've been intrigued by the functionality and strong typing of Haskell and O'caml for a while, but never had an incentive to really learn them without a project. So I tackled ocaml first, looking at their tutorial, and without too much trouble got a logarithm program working, confirming in the process that (a) the syntax sucks (I like operator overloading for math) and (b) it seems pretty fast, although I need to try Java or Perl or some C++ library for comparison. Not as fast as 'bc', but it might be using better algorithms. In particular I was able to print both the exact form of the big rational and a decimal form to as many digits as I wanted easily. Then I moved to Haskell, largely rewriting the ML code. The result is much nicer looking, being able to say 'sum + powx' instead of 'Num.add_num sum powx', or having to define 'num_2' for a bignum version of 2. It took longer to actually run properly -- I got bit by laziness, but John Meacham tipped me off. And now I have '34283788463231218 % 20536892788086675' being printed out, although I seem to have a bug since if that's a numerator and denominator the result is not the natural logarithm of 2. But my real question is can I get Haskell to actually do that division itself? I get complaints about 'Fractional Integer'; I had to use bc to do the division. -xx- Damien X-)
participants (2)
-
Damien R. Sullivan
-
Ferenc Wagner