반응형
Elixir에서 숫자를 거듭 제곱하려면 어떻게해야합니까?
Elixir에서 지수로 숫자를 계산하려면 어떻게해야합니까?
예를 들어 2 3 은 8을 반환합니다.
사용 math 모듈 : 얼랑를
:math.pow(2,3) #=> 8.0
정수를 원하는 경우 :
:math.pow(2,3) |> round #=> 8
Erlang :math.pow
에는 몇 가지 제한 사항이 있습니다. 예를 들어 실제로 높은 정수 거듭 제곱을 허용하지 않습니다.
iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression
런타임에서 제공하는 임의의 큰 정수로 작동하는 계산 능력에 대한 빠른 알고리즘을 쉽게 다시 구현할 수 있습니다.
defmodule Pow do
require Integer
def pow(_, 0), do: 1
def pow(x, n) when Integer.is_odd(n), do: x * pow(x, n - 1)
def pow(x, n) do
result = pow(x, div(n, 2))
result * result
end
end
iex(9)> Pow.pow(2, 10000)
19950631168807583848837421626835850838234968318861924548520089498529438830...
다음은 power 함수의 마무리 호출 최적화 구현입니다.
def pow(n, k), do: pow(n, k, 1)
defp pow(_, 0, acc), do: acc
defp pow(n, k, acc), do: pow(n, k - 1, n * acc)
Tis는 작동합니다-그것이 작동하는 이유를 정확히 알 수있을만큼 충분히 배울 때 좋을 것입니다. 아마도 eval과 관련이있을 것입니다.
defmodule Example do
require Integer
def do_it(list) do
list
|> Enum.reject(&Integer.is_odd(&1))
|> Enum.map(&(:math.pow(&1,3)))
end
end
참고 URL : https://stackoverflow.com/questions/32024156/how-do-i-raise-a-number-to-a-power-in-elixir
반응형
'code' 카테고리의 다른 글
OrderedDict를 사용하지 않는 이유가 있습니까? (0) | 2020.11.30 |
---|---|
Python Pandas : 데이터 프레임 열의 문자를 바꾸는 방법은 무엇입니까? (0) | 2020.11.30 |
HTML 엔티티를 디코딩하는 자바 스크립트 (0) | 2020.11.29 |
Bootstrap 3의 도구 설명에 줄 바꿈 추가 (0) | 2020.11.29 |
Android의 라디오 그룹에서 라디오 버튼이 선택되었는지 확인하는 방법은 무엇입니까? (0) | 2020.11.29 |