1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

swiftの累乗計算(pow)

Posted at

カメラアプリを作成中、
ISO感度の上下限が端末に乗ってるカメラによってバラバラなことが判明。

特定の数値内でキリのいい数字(2の累乗)の値が欲しくなった。

多くのサイトではpow(_:_:)を使うことを勧めているが、
こいつは戻り値がDecimalでFloatに型変換するのはちょっとめんどくさい。(っぽい)
pow(::) | Apple Developer Documentation

なぜかドキュメントは見つからなかったが、powlとpowfがあるのを確認。

powf(Float, Float)-> Float

powl(Double, Double)-> Double

こちらを使えば、FloatとDoubleで取得することが可能だった。

iOS15以上限定だけど、formatted()を使うとIntなどの型に変換することもできる。

let pow = pow(2, 2.0)

if #available(iOS 15.0, *) {
	let IntPow = pow.formatted(.number)
} else {
	// Fallback on earlier versions
}

今回はバージョン範囲の問題で目的と合わなかった為、使わなかった。
最終的に使用したISO感度を2の累乗で取得するコード

guard let minISO:Float = 33.0
guard let maxISO:Float = 3034.0

let startLog =  log2(Float(minISO))
let startExponent = Int(ceil(startLog))
let endLog =  log2(Float(maxISO))
let endExponent = Int(floor(endLog))

var indexedISOList = [String]()
for i in startExponent...endExponent {
	// minISO<x<maxISOの範囲で2の累乗を求める
	let settingIsoVal = powf(2, Float(i))
	print(settingIsoVal)
}

// 64
// 128
// 256
// 512
// 1024
// 2048
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?