Skip to content

Commit c753588

Browse files
Merge pull request #5 from SomeRandomiOSDev/1.1.0_CompileTime
Reduced compile time by breaking up complex statements into smaller components
2 parents 174068c + cc4b50c commit c753588

File tree

4 files changed

+100
-24
lines changed

4 files changed

+100
-24
lines changed

Sources/Complex/Functions.swift

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,32 @@ public func sin(_ value: Complex<Float80>) -> Complex<Float80> {
158158

159159
@_transparent
160160
public func asin(_ value: Complex<Float>) -> Complex<Float> {
161-
return -.i * log(.i * value + sqrt(1.0 - value * value))
161+
//swiftlint:disable identifier_name
162+
let iz = .i * value
163+
let root = sqrt(1.0 - (value * value))
164+
165+
return -.i * log(iz + root)
166+
//swiftlint:enable identifier_name
162167
}
163168

164169
@_transparent
165170
public func asin(_ value: Complex<Double>) -> Complex<Double> {
166-
return -.i * log(.i * value + sqrt(1.0 - value * value))
171+
//swiftlint:disable identifier_name
172+
let iz = .i * value
173+
let root = sqrt(1.0 - (value * value))
174+
175+
return -.i * log(iz + root)
176+
//swiftlint:enable identifier_name
167177
}
168178

169179
@_transparent
170180
public func asin(_ value: Complex<Float80>) -> Complex<Float80> {
171-
return -.i * log(.i * value + sqrt(1.0 - value * value))
181+
//swiftlint:disable identifier_name
182+
let iz = .i * value
183+
let root = sqrt(1.0 - (value * value))
184+
185+
return -.i * log(iz + root)
186+
//swiftlint:enable identifier_name
172187
}
173188

174189
//
@@ -212,17 +227,20 @@ public func cos(_ value: Complex<Float80>) -> Complex<Float80> {
212227

213228
@_transparent
214229
public func acos(_ value: Complex<Float>) -> Complex<Float> {
215-
return -.i * log(value + sqrt(value * value - 1.0))
230+
let root = sqrt((value * value) - 1.0)
231+
return -.i * log(value + root)
216232
}
217233

218234
@_transparent
219235
public func acos(_ value: Complex<Double>) -> Complex<Double> {
220-
return -.i * log(value + sqrt(value * value - 1.0))
236+
let root = sqrt((value * value) - 1.0)
237+
return -.i * log(value + root)
221238
}
222239

223240
@_transparent
224241
public func acos(_ value: Complex<Float80>) -> Complex<Float80> {
225-
return -.i * log(value + sqrt(value * value - 1.0))
242+
let root = sqrt((value * value) - 1.0)
243+
return -.i * log(value + root)
226244
}
227245

228246
//
@@ -265,17 +283,20 @@ public func tan(_ value: Complex<Float80>) -> Complex<Float80> {
265283

266284
@_transparent
267285
public func atan(_ value: Complex<Float>) -> Complex<Float> {
268-
return .i * 0.5 * log((.i + value) / (.i - value))
286+
let quotient = (.i + value) / (.i - value)
287+
return .i * 0.5 * log(quotient)
269288
}
270289

271290
@_transparent
272291
public func atan(_ value: Complex<Double>) -> Complex<Double> {
273-
return .i * 0.5 * log((.i + value) / (.i - value))
292+
let quotient = (.i + value) / (.i - value)
293+
return .i * 0.5 * log(quotient)
274294
}
275295

276296
@_transparent
277297
public func atan(_ value: Complex<Float80>) -> Complex<Float80> {
278-
return .i * 0.5 * log((.i + value) / (.i - value))
298+
let quotient = (.i + value) / (.i - value)
299+
return .i * 0.5 * log(quotient)
279300
}
280301

281302
//

Sources/Complex/Functions.swift.gyb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,12 @@ public func sin(_ value: Complex<${type}>) -> Complex<${type}> {
117117
% for type in ["Float", "Double", "Float80"]:
118118
@_transparent
119119
public func asin(_ value: Complex<${type}>) -> Complex<${type}> {
120-
return -.i * log(.i * value + sqrt(1.0 - value * value))
120+
//swiftlint:disable identifier_name
121+
let iz = .i * value
122+
let root = sqrt(1.0 - (value * value))
123+
124+
return -.i * log(iz + root)
125+
//swiftlint:enable identifier_name
121126
}
122127

123128
% end
@@ -147,7 +152,8 @@ public func cos(_ value: Complex<${type}>) -> Complex<${type}> {
147152
% for type in ["Float", "Double", "Float80"]:
148153
@_transparent
149154
public func acos(_ value: Complex<${type}>) -> Complex<${type}> {
150-
return -.i * log(value + sqrt(value * value - 1.0))
155+
let root = sqrt((value * value) - 1.0)
156+
return -.i * log(value + root)
151157
}
152158

153159
% end
@@ -176,7 +182,8 @@ public func tan(_ value: Complex<${type}>) -> Complex<${type}> {
176182
% for type in ["Float", "Double", "Float80"]:
177183
@_transparent
178184
public func atan(_ value: Complex<${type}>) -> Complex<${type}> {
179-
return .i * 0.5 * log((.i + value) / (.i - value))
185+
let quotient = (.i + value) / (.i - value)
186+
return .i * 0.5 * log(quotient)
180187
}
181188

182189
% end

Tests/ComplexTests/FunctionsTests.swift

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,31 @@ class FunctionsTests: XCTestCase {
156156

157157
func test_asin() {
158158
for complex in sampleComplexNumbers(ofType: Float.self) {
159-
XCTAssertEqual(asin(complex), -.i * log(.i * complex + sqrt(1.0 - complex * complex)), accuracy: 0.0001)
159+
//swiftlint:disable identifier_name
160+
let iz = .i * complex
161+
let root = sqrt(1.0 - (complex * complex))
162+
let result = -.i * log(iz + root)
163+
//swiftlint:enable identifier_name
164+
165+
XCTAssertEqual(asin(complex), result, accuracy: 0.0001)
160166
}
161167
for complex in sampleComplexNumbers(ofType: Double.self) {
162-
XCTAssertEqual(asin(complex), -.i * log(.i * complex + sqrt(1.0 - complex * complex)), accuracy: 0.0001)
168+
//swiftlint:disable identifier_name
169+
let iz = .i * complex
170+
let root = sqrt(1.0 - (complex * complex))
171+
let result = -.i * log(iz + root)
172+
//swiftlint:enable identifier_name
173+
174+
XCTAssertEqual(asin(complex), result, accuracy: 0.0001)
163175
}
164176
for complex in sampleComplexNumbers(ofType: Float80.self) {
165-
XCTAssertEqual(asin(complex), -.i * log(.i * complex + sqrt(1.0 - complex * complex)), accuracy: 0.0001)
177+
//swiftlint:disable identifier_name
178+
let iz = .i * complex
179+
let root = sqrt(1.0 - (complex * complex))
180+
let result = -.i * log(iz + root)
181+
//swiftlint:enable identifier_name
182+
183+
XCTAssertEqual(asin(complex), result, accuracy: 0.0001)
166184
}
167185
}
168186

@@ -192,13 +210,22 @@ class FunctionsTests: XCTestCase {
192210

193211
func test_acos() {
194212
for complex in sampleComplexNumbers(ofType: Float.self) {
195-
XCTAssertEqual(acos(complex), -.i * log(complex + sqrt(complex * complex - 1.0)), accuracy: 0.0001)
213+
let root = sqrt((complex * complex) - 1.0)
214+
let result = -.i * log(complex + root)
215+
216+
XCTAssertEqual(acos(complex), result, accuracy: 0.0001)
196217
}
197218
for complex in sampleComplexNumbers(ofType: Double.self) {
198-
XCTAssertEqual(acos(complex), -.i * log(complex + sqrt(complex * complex - 1.0)), accuracy: 0.0001)
219+
let root = sqrt((complex * complex) - 1.0)
220+
let result = -.i * log(complex + root)
221+
222+
XCTAssertEqual(acos(complex), result, accuracy: 0.0001)
199223
}
200224
for complex in sampleComplexNumbers(ofType: Float80.self) {
201-
XCTAssertEqual(acos(complex), -.i * log(complex + sqrt(complex * complex - 1.0)), accuracy: 0.0001)
225+
let root = sqrt((complex * complex) - 1.0)
226+
let result = -.i * log(complex + root)
227+
228+
XCTAssertEqual(acos(complex), result, accuracy: 0.0001)
202229
}
203230
}
204231

@@ -228,13 +255,22 @@ class FunctionsTests: XCTestCase {
228255

229256
func test_atan() {
230257
for complex in sampleComplexNumbers(ofType: Float.self) {
231-
XCTAssertEqual(atan(complex), .i * 0.5 * log((.i + complex) / (.i - complex)), accuracy: 0.0001)
258+
let quotient = (.i + complex) / (.i - complex)
259+
let result = .i * 0.5 * log(quotient)
260+
261+
XCTAssertEqual(atan(complex), result, accuracy: 0.0001)
232262
}
233263
for complex in sampleComplexNumbers(ofType: Double.self) {
234-
XCTAssertEqual(atan(complex), .i * 0.5 * log((.i + complex) / (.i - complex)), accuracy: 0.0001)
264+
let quotient = (.i + complex) / (.i - complex)
265+
let result = .i * 0.5 * log(quotient)
266+
267+
XCTAssertEqual(atan(complex), result, accuracy: 0.0001)
235268
}
236269
for complex in sampleComplexNumbers(ofType: Float80.self) {
237-
XCTAssertEqual(atan(complex), .i * 0.5 * log((.i + complex) / (.i - complex)), accuracy: 0.0001)
270+
let quotient = (.i + complex) / (.i - complex)
271+
let result = .i * 0.5 * log(quotient)
272+
273+
XCTAssertEqual(atan(complex), result, accuracy: 0.0001)
238274
}
239275
}
240276

Tests/ComplexTests/FunctionsTests.swift.gyb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,13 @@ class FunctionsTests: XCTestCase {
135135
func test_asin() {
136136
% for type in ["Float", "Double", "Float80"]:
137137
for complex in sampleComplexNumbers(ofType: ${type}.self) {
138-
XCTAssertEqual(asin(complex), -.i * log(.i * complex + sqrt(1.0 - complex * complex)), accuracy: 0.0001)
138+
//swiftlint:disable identifier_name
139+
let iz = .i * complex
140+
let root = sqrt(1.0 - (complex * complex))
141+
let result = -.i * log(iz + root)
142+
//swiftlint:enable identifier_name
143+
144+
XCTAssertEqual(asin(complex), result, accuracy: 0.0001)
139145
}
140146
% end
141147
}
@@ -159,7 +165,10 @@ class FunctionsTests: XCTestCase {
159165
func test_acos() {
160166
% for type in ["Float", "Double", "Float80"]:
161167
for complex in sampleComplexNumbers(ofType: ${type}.self) {
162-
XCTAssertEqual(acos(complex), -.i * log(complex + sqrt(complex * complex - 1.0)), accuracy: 0.0001)
168+
let root = sqrt((complex * complex) - 1.0)
169+
let result = -.i * log(complex + root)
170+
171+
XCTAssertEqual(acos(complex), result, accuracy: 0.0001)
163172
}
164173
% end
165174
}
@@ -183,7 +192,10 @@ class FunctionsTests: XCTestCase {
183192
func test_atan() {
184193
% for type in ["Float", "Double", "Float80"]:
185194
for complex in sampleComplexNumbers(ofType: ${type}.self) {
186-
XCTAssertEqual(atan(complex), .i * 0.5 * log((.i + complex) / (.i - complex)), accuracy: 0.0001)
195+
let quotient = (.i + complex) / (.i - complex)
196+
let result = .i * 0.5 * log(quotient)
197+
198+
XCTAssertEqual(atan(complex), result, accuracy: 0.0001)
187199
}
188200
% end
189201
}

0 commit comments

Comments
 (0)