1. ホーム
  2. integer

[解決済み] Swift言語で整数のべき乗を取得する方法は?

2022-02-05 16:42:31

質問

最近swiftを勉強しているのですが、基本的な問題で答えが見つからないことがあります。

のようなものを取得したいのですが

var a:Int = 3
var b:Int = 3 
println( pow(a,b) ) // 27

しかし、pow関数はdouble数に対してのみ動作し、integerに対しては動作せず、Double(a)やa.double()のようなものでintをdoubleにキャストすることさえできない...。

なぜ整数の累乗を返さないのでしょうか? そして、なぜ整数をdoubleにキャストできないかというと、3を3.0(または3.00000...)に変えるだけだからです。

2つの整数があるとき、べき乗の演算をしたい場合、どうすればスムーズにできますか?

ありがとうございます。

解決方法は?

もしよろしければ infix operator を行うことです。

// Put this at file level anywhere in your project
infix operator ^^ { associativity left precedence 160 }
func ^^ (radix: Int, power: Int) -> Int {
    return Int(pow(Double(radix), Double(power)))
}

// ...
// Then you can do this...
let i = 2 ^^ 3
// ... or
println("2³ = \(2 ^^ 3)") // Prints 2³ = 8

キャレットを2つ使ったので、今でも XOR演算子 .

Swift 3に対応したアップデート

Swift 3では「マジックナンバー」。 precedence は次のように置き換えられます。 precedencegroups :

precedencegroup PowerPrecedence { higherThan: MultiplicationPrecedence }
infix operator ^^ : PowerPrecedence
func ^^ (radix: Int, power: Int) -> Int {
    return Int(pow(Double(radix), Double(power)))
}

// ...
// Then you can do this...
let i2 = 2 ^^ 3
// ... or
print("2³ = \(2 ^^ 3)") // Prints 2³ = 8