Newbie questions

Kostis Sagonas <>
Sat Mar 25 09:47:11 CET 2006


Nick Linter wrote:
 > I was playing with Erlang for calculation over large numbers and 
 > discovered some issues:
 > 1. math:log fails with "badarg" for big integers.

An example would have helped us understand better what the issue is.
Currently, I get:

Eshell V5.5  (abort with ^G)
1> math:log(43466557686938914862637500386755014010958388901725051132915256476112292920052539720295234060457458057800732025086130975998716977051839168242483814062805283311821051327273518050882075662659534523370463746326528).
480.407

 > 3. Let me define the following function:
 >   fib(0) -> 0;
 >   fib(1) -> 1;
 >   fib(N) -> fib(N-1) + fib(N-2).
 > I have failed to convert this function _without_ put/get to be able to 
 > compute even fib(100) within reasonable period of time (I guess I did it 
 > wrong so that tail recursion was not here). Is there a way to compute 
 > fib(N), N>=100 without side effects?

Yes. Try:

-module(fib).
-export([fib/1]).
-import(math, [pow/3, sqrt/1]).

fib(N) ->
  trunc((1/sqrt(5)) * (pow(((1+sqrt(5))/2),N) - pow(((1-sqrt(5))/2),N))).

Kostis

PS. The performance you are experiencing in your version of fib/1
    has nothing to do with tail recursion...




More information about the erlang-questions mailing list