如何在Elixir中提高一个数字?

Nat*_*ong 62 elixir

如何用Elixir中的指数计算数字?

例如,2 3将返回8.

Nat*_*ong 70

使用Erlang:math模块

:math.pow(2,3) #=> 8.0
Run Code Online (Sandbox Code Playgroud)

如果你想要一个整数:

:math.pow(2,3) |> round #=> 8
Run Code Online (Sandbox Code Playgroud)


Paw*_*rok 59

Erlang :math.pow有一些限制,例如它不允许真正的高整数幂:

iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression
Run Code Online (Sandbox Code Playgroud)

您可以轻松地重新实现一个快速算法,用于计算与运行时提供的任意大整数一起使用的功能:

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...
Run Code Online (Sandbox Code Playgroud)


Nat*_*han 20

**/2

从 Elixir 1.13 开始**可用。

> 2 ** 3 
8
Run Code Online (Sandbox Code Playgroud)

注意:如果指数小于 0,则返回浮点数。

文档


小智 12

这是一个尾调用优化的电源功能实现:

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)
Run Code Online (Sandbox Code Playgroud)


Nat*_*ong 9

整数.pow/2

从 v1.12 开始,Integer.pow/2是执行此操作的方法。


leg*_*cia 6

如果基数为 2 并且幂为整数,则可以使用函数 进行左移Bitwise.bsl。例如,2 3可以用以下公式计算:

> Bitwise.bsl(1, 3)
8
Run Code Online (Sandbox Code Playgroud)