And here is faster O(logN) version<br><br>-module(m).<br><br>-export([pow/2, test/0]).<br><br>pow(X, N) when is_integer(N), N >= 0 -> pow(X, N, 1);<br>pow(X, N) when is_integer(N) -> 1 / pow(X, -N, 1);<br>pow(X, N) when is_float(N) -> math:pow(X, N).<br>
<br>pow(_, 0, P) -> P;<br>pow(X, N, A) when N rem 2 =:= 0 -><br>    pow(X * X, N div 2, A);<br>pow(X, N, A) -> pow(X, N - 1, A * X).<br><br>test() -><br>    [begin X = 1 bsl N, X = pow(2, N) end<br>     || N <- lists:seq(0, 10)],<br>
    [begin X = 1 / (1 bsl N), X = pow(2, -N) end<br>     || N <- lists:seq(1, 10)].<br><div class="gmail_quote"><br>On Fri, Apr 10, 2009 at 9:46 AM, Kostis Sagonas <span dir="ltr"><<a href="mailto:kostis@cs.ntua.gr">kostis@cs.ntua.gr</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div class="h5">Charles Cui wrote:<br>
> math:pow(10,1000).<br>
> ** exception error: bad argument in an arithmetic expression<br>
>      in function  math:pow/2<br>
>         called as math:pow(10,1000)<br>
><br>
> I want to do bigint compute,such as math:pow(a,b).<br>
> Can Erlang do this?<br>
<br>
</div></div>Sure it can.  It's a Turing complete language after all...<br>
You just have to define it yourself.<br>
One possible definition appears below:<br>
<br>
-------------------------------------------------------<br>
-module(m).<br>
-export([pow/2]).<br>
<br>
-spec pow(integer(), non_neg_integer()) -> integer()<br>
        ; (float(), non_neg_integer()) -> float().<br>
<br>
pow(X, N) when is_integer(N), N >= 0 -> pow(X, N, 1).<br>
<br>
pow(_, 0, P) -> P;<br>
pow(X, N, A) -> pow(X, N-1, A*X).<br>
<br>
---------------------------------------------------------<br>
Eshell V5.7  (abort with ^G)<br>
1> c(m).<br>
{ok,m}<br>
2> m:pow(10, 100).<br>
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<br>
<br>
Kostis<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss.  Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com">www.gooddata.com</a><br>