Swift의 지수 연산자
Swift 언어 참조의 기본 산술 연산자에 정의 된 지수 연산자가 표시되지 않습니다.
언어에 미리 정의 된 정수 또는 부동 지수 연산자가 실제로 없습니까?
연산자는 없지만 다음과 같이 pow 함수를 사용할 수 있습니다.
return pow(num, power)
원하는 경우 연산자가 다음과 같이 pow 함수를 호출하도록 할 수도 있습니다.
infix operator ** { associativity left precedence 170 }
func ** (num: Double, power: Double) -> Double{
return pow(num, power)
}
2.0**2.0 //4.0
2를 어느 정도 거듭 제곱하는 경우 비트 왼쪽 시프트 연산자를 사용할 수 있습니다.
let x = 2 << 0 // 2
let y = 2 << 1 // 4
let z = 2 << 7 // 256
'파워'값은 생각보다 1이 적습니다.
이것은보다 빠르며 pow(2.0, 8.0)
복식을 사용하지 않아도됩니다.
**
중위 연산자 의 Swift 3 버전을 찾는 사람 :
precedencegroup ExponentiationPrecedence {
associativity: right
higherThan: MultiplicationPrecedence
}
infix operator ** : ExponentiationPrecedence
func ** (_ base: Double, _ exp: Double) -> Double {
return pow(base, exp)
}
func ** (_ base: Float, _ exp: Float) -> Float {
return pow(base, exp)
}
2.0 ** 3.0 ** 2.0 // 512
(2.0 ** 3.0) ** 2.0 // 64
나는 그렇게했다 :
operator infix ** { associativity left precedence 200 }
func ** (base: Double, power: Double) -> Double {
return exp(log(base) * power)
}
하나는 없지만 pow
기능이 있습니다.
Int
유형 에 대한 지수 연산자에 특별히 관심이 있다면 부동 소수점 숫자가 메모리에서 표현되는 방식으로 인해 기존 답변이 특히 큰 숫자에 대해 잘 작동한다고 생각하지 않습니다. 로 변환 할 때 Float
또는 Double
에서 Int
(에 의해 요구되는 당시와 pow
, powf
와 powl
의 함수 Darwin
모듈) 당신은 정밀도를 잃을 수 있습니다 . 다음은 정확한 버전입니다 Int
.
let pow = { Array(repeating: $0, count: $1).reduce(1, *) }
이 버전은 특히 메모리 효율적이지 않으며 소스 코드 크기에 최적화되어 있습니다.
중간 배열을 생성하지 않는 다른 버전 :
func pow(_ x: Int, _ y: Int) -> Int {
var result = 1
for i in 0..<y {
result *= x
}
return result
}
대부분의 C 계열 언어와 마찬가지로 하나도 없습니다.
스위프트 4.2
var n = 1.0
var result = 45 * pow(n, 3) + 20 * pow(n, 2) + 19
print(result)
// 84.0
대안은 NSExpression을 사용하는 것입니다.
let mathExpression = NSExpression(format:"2.5**2.5")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Double
또는
let mathExpression = NSExpression(format:"2**3")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Int
참고URL : https://stackoverflow.com/questions/24065801/exponentiation-operator-in-swift
'Program Tip' 카테고리의 다른 글
이미지를 나타내는 numpy 배열 리샘플링 (0) | 2020.11.01 |
---|---|
명령 줄을 사용하여 디렉토리와 파일을 삭제하지만 존재하지 않는 경우 오류가 발생하지 않습니다. (0) | 2020.11.01 |
Swift에서 한 줄씩 파일 / URL 읽기 (0) | 2020.10.31 |
새 도구 모음과 함께 탭 사용 (AppCompat v7-21) (0) | 2020.10.31 |
Anaconda Python은 Windows에서 어디에 설치됩니까? (0) | 2020.10.31 |