Skip to content

Instantly share code, notes, and snippets.

@jj1bdx
Created January 26, 2010 07:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jj1bdx/286650 to your computer and use it in GitHub Desktop.
Save jj1bdx/286650 to your computer and use it in GitHub Desktop.
obsolete: see 293169
%% square root function for integers in Erlang
%% by Kenji Rikitake <kenji.rikitake@acm.org> 26-JAN-2010
%% Distributed under MIT license at the end of the source code.
-module(bignum_sqrt).
-export([sqrt/1]).
%% significand digits for float estimation
-define(DIGITS, 10).
%% computing square root of N
%% with Newton-Raphson method
sqrt(N) when (is_integer(N) and (N > 0)) ->
% estimation of the root by the float calc
L = integer_to_list(N),
Len = length(L),
case Len > ?DIGITS of
true ->
Exp = Len - ?DIGITS,
M = list_to_integer(lists:sublist(L, ?DIGITS)),
XM = math:exp(math:log(M) / 2) *
math:pow(10, (Exp rem 2) / 2),
X = list_to_integer(integer_to_list(trunc(XM)) ++
lists:duplicate(Exp div 2, $0));
false ->
X = trunc(math:sqrt(N))
end,
sqrt(N, X).
sqrt(N, X) ->
% Newton-Raphson method of solving square root
X2 = ((N div X) + X) div 2,
case X2 =/= X of
true ->
sqrt(N, X2);
false ->
X
end.
%% MIT License:
%% Copyright (c) 2010 by Kenji Rikitake.
%%
%% Permission is hereby granted, free of charge, to any person
%% obtaining a copy of this software and associated documentation
%% files (the "Software"), to deal in the Software without
%% restriction, including without limitation the rights to use,
%% copy, modify, merge, publish, distribute, sublicense, and/or sell
%% copies of the Software, and to permit persons to whom the
%% Software is furnished to do so, subject to the following
%% conditions:
%%
%% The above copyright notice and this permission notice shall be
%% included in all copies or substantial portions of the Software.
%%
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
%% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
%% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
%% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
%% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
%% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
%% OTHER DEALINGS IN THE SOFTWARE.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment