A..2 課題2

prog2.jl

# prog2a.jl --- a の n 乗を計算する。
function prog2a(a,n)
  p=1 # p=one(a) とすべき?
  for i=1:n
    p *= a
  end
  p
end
prog2a.jl

# prog2a.jl --- a の n 乗を計算する。
function prog2a(a,n)
  p=1 # p=one(a) とすべき?
  for i=1:n
    p *= a
  end
  p
end

sizeof(1) とか sizeof(Int) は 8 を返す。

x=1 としてから x=2x;bitstring(x) としてみよう。

$ n$ が負の場合にも対応するとか、 $ a$ が整数かそうでないかで処理を分けたりする? ループ回すのもちょっと気が利かないし。
prog2b.jl

# prog2b.jl ---a の n 乗を計算する。 (お遊びモード)
function prog2b(a,n::Int)
  if n >= 0
    positivefact(a,n)
  elseif isa(a,Int)
    one(a) // positivefact(a, -n)
  else
    one(a) / positivefact(a, -n)
  end
end

function positivefact(a,n::Int)
  if n == 0
    one(a) # 0^0 チェックをすべきか? undefined とか返してやる?
  elseif n % 2 == 0
    prog2b(a*a, div(n,2))
  else
    a * prog2b(a*a, div(n,2))
  end
end



桂田 祐史