2
2
//
3
3
// This source file is part of the Swift.org open source project
4
4
//
5
- // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5
+ // Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
6
6
// Licensed under Apache License v2.0 with Runtime Library Exception
7
7
//
8
8
// See https://swift.org/LICENSE.txt for license information
@@ -14,11 +14,12 @@ import SwiftShims
14
14
15
15
// Generic functions implementable directly on FloatingPoint.
16
16
@_transparent
17
- @available ( swift, deprecated: 4.2 , renamed: " abs " )
17
+ @available ( swift, deprecated: 4.2 , obsoleted : 5.1 , renamed: " Swift. abs" )
18
18
public func fabs< T: FloatingPoint > ( _ x: T ) -> T {
19
19
return x. magnitude
20
20
}
21
21
22
+ @available ( swift, obsoleted: 5.1 , message: " Use Swift.sqrt(x) or x.squareRoot(). " )
22
23
@_transparent
23
24
public func sqrt< T: FloatingPoint > ( _ x: T ) -> T {
24
25
return x. squareRoot ( )
@@ -112,7 +113,7 @@ public func isnan<T: FloatingPoint>(_ value: T) -> Bool { fatalError() }
112
113
@available ( * , unavailable, message: " use the sign property. " )
113
114
public func signbit< T: FloatingPoint > ( _ value: T ) -> Int { fatalError ( ) }
114
115
115
- @available ( swift, deprecated: 4.2 , message: " use the exponent property. " )
116
+ @available ( swift, deprecated: 4.2 , obsoleted : 5.1 , message: " use the exponent property. " )
116
117
public func ilogb< T: BinaryFloatingPoint > ( _ x: T ) -> Int {
117
118
return Int ( x. exponent)
118
119
}
@@ -155,44 +156,20 @@ UnaryFunctions = [
155
156
'acos', 'asin', 'atan', 'tan',
156
157
'acosh', 'asinh', 'atanh', 'cosh', 'sinh', 'tanh',
157
158
'expm1 ',
158
- 'log1 p', 'logb' ,
159
- 'cbrt' , ' erf', 'erfc' , 'tgamma ',
159
+ 'log1 p',
160
+ 'erf', 'erfc',
160
161
]
161
162
162
163
# These functions have a corresponding LLVM intrinsic
163
- # We call this intrinsic via the Builtin method so keep this list in
164
- # sync with core/ BuiltinMath. swift. gyb
165
164
UnaryIntrinsicFunctions = [
166
- 'cos', 'sin',
167
- 'exp', 'exp2 ',
168
- 'log', 'log10 ', 'log2 ',
169
- 'nearbyint', 'rint',
165
+ 'cos', 'sin', 'exp', 'exp2 ', 'log', 'log10 ', 'log2 ', 'nearbyint', 'rint'
170
166
]
171
167
172
168
# ( T, T) - > T
173
169
BinaryFunctions = [
174
- 'atan2 ', 'hypot', 'pow',
175
- 'copysign', 'nextafter', 'fdim', 'fmax', 'fmin'
170
+ 'atan2 ', 'hypot', 'fdim', 'copysign'
176
171
]
177
172
178
- # These functions have special implementations.
179
- OtherFunctions = [
180
- 'scalbn', 'lgamma', 'remquo', 'nan', 'jn', 'yn'
181
- ]
182
-
183
- # These functions are imported correctly as - is.
184
- OkayFunctions = [ 'j0 ', 'j1 ', 'y0 ', 'y1 ']
185
-
186
- # These functions are not supported for various reasons.
187
- UnhandledFunctions = [
188
- 'math_errhandling', 'scalbln',
189
- 'lrint', 'lround', 'llrint', 'llround', 'nexttoward',
190
- 'isgreater ', 'isgreaterequal ', 'isless ', 'islessequal ',
191
- 'islessgreater', 'isunordered', '__exp10 ',
192
- '__sincos', '__cospi', '__sinpi', '__tanpi', '__sincospi'
193
- ]
194
-
195
-
196
173
def AllFloatTypes( ) :
197
174
for bits in allFloatBits:
198
175
yield floatName ( bits) , cFloatName( bits) , cFuncSuffix( bits)
@@ -226,50 +203,74 @@ def TypedBinaryFunctions():
226
203
% end
227
204
@_transparent
228
205
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
229
- return ${ T} ( ${ ufunc} $ { f } ( $ { CT } ( x ) ) )
206
+ return ${ T} . ${ ufunc} ( x )
230
207
}
231
208
% if T == 'Float80 ':
232
209
#endif
233
210
% end
234
211
235
212
% end
213
+ @available ( swift, deprecated: 5.1 , message: " Use `root(x, 3)`. " )
214
+ @_transparent
215
+ public func cbrt( _ x: Float ) -> Float {
216
+ return Float . root ( x, 3 )
217
+ }
218
+
219
+ @available ( swift, deprecated: 5.1 , message: " Use `x.exponent` or `floor(log2(x))`. " )
220
+ @_transparent
221
+ public func logb( _ x: Float ) -> Float {
222
+ return Float . log2 ( x) . rounded ( . down)
223
+ }
224
+
225
+ @available ( swift, deprecated: 5.1 , message: " Use `gamma(x)`. " )
226
+ @_transparent
227
+ public func tgamma( _ x: Float ) -> Float {
228
+ return Float . gamma ( x)
229
+ }
230
+
231
+ #if (arch(i386) || arch(x86_64)) && !os(Windows)
232
+ @available ( swift, deprecated: 5.1 , message: " Use `root(x, 3)`. " )
233
+ @_transparent
234
+ public func cbrt( _ x: Float80 ) -> Float80 {
235
+ return Float80 . root ( x, 3 )
236
+ }
237
+
238
+ @available ( swift, deprecated: 5.1 , message: " Use `x.exponent` or `floor(log2(x))`. " )
239
+ @_transparent
240
+ public func logb( _ x: Float80 ) -> Float80 {
241
+ return Float80 . log2 ( x) . rounded ( . down)
242
+ }
243
+
244
+ @available ( swift, deprecated: 5.1 , message: " Use `gamma(x)`. " )
245
+ @_transparent
246
+ public func tgamma( _ x: Float80 ) -> Float80 {
247
+ return Float80 . gamma ( x)
248
+ }
249
+ #endif
236
250
237
- #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
238
251
// Unary intrinsic functions
239
252
// Note these have a corresponding LLVM intrinsic
240
253
% for T, ufunc in TypedUnaryIntrinsicFunctions ( ) :
241
254
% if T == 'Float80 ':
242
255
#if (arch(i386) || arch(x86_64)) && !os(Windows)
243
256
% end
257
+ % if ufunc [ - 3 : ] != 'int':
244
258
@_transparent
245
259
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
246
- return _ ${ ufunc} ( x)
260
+ return $ { T } . ${ ufunc} ( x)
247
261
}
248
- % if T == 'Float80 ':
249
- #endif
250
- % end
251
-
252
- % end
253
- #else
254
- // FIXME: As of now, we cannot declare 64-bit (Double/CDouble) overlays here.
255
- // Since CoreFoundation also exports libc functions, they will conflict with
256
- // Swift overlays when building Foundation. For now, just like normal
257
- // UnaryFunctions, we define overlays only for OverlayFloatTypes.
258
- % for ufunc in UnaryIntrinsicFunctions:
259
- % for T, CT, f in OverlayFloatTypes( ) :
260
- % if T == 'Float80 ':
261
- #if (arch(i386) || arch(x86_64)) && !os(Windows)
262
- % end
262
+ % else :
263
+ @available ( swift, deprecated: 5.1 , message: " Swift does not model dynamic rounding modes, use x.rounded(.toNearestOrEven) instead. " )
263
264
@_transparent
264
265
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
265
- return $ { T } ( $ { ufunc } $ { f } ( $ { CT } ( x ) ) )
266
+ return x . rounded ( . toNearestOrEven )
266
267
}
267
- % if T == 'Float80 ':
268
+ % end
269
+ % if T == 'Float80 ':
268
270
#endif
269
- % end
270
271
% end
272
+
271
273
% end
272
- #endif
273
274
274
275
// Binary functions
275
276
@@ -287,6 +288,54 @@ public func ${bfunc}(_ lhs: ${T}, _ rhs: ${T}) -> ${T} {
287
288
288
289
% end
289
290
291
+ @_transparent
292
+ public func pow( _ x: Float , _ y: Float ) -> Float {
293
+ return Float . pow ( x, y)
294
+ }
295
+
296
+ @available ( swift, deprecated: 5.1 , message: " Use the .nextUp and .nextDown properties. " )
297
+ @_transparent
298
+ public func nextafter( _ x: Float , _ y: Float ) -> Float {
299
+ return y > x ? x. nextUp : ( y < x ? x. nextDown : y)
300
+ }
301
+
302
+ @available ( swift, deprecated: 5.1 , message: " Use Float.minimum( ) or Swift.min( ) " )
303
+ @_transparent
304
+ public func fmin( _ x: Float , _ y: Float ) -> Float {
305
+ return . minimum( x, y)
306
+ }
307
+
308
+ @available ( swift, deprecated: 5.1 , message: " Use Float.maximum( ) or Swift.max( ) " )
309
+ @_transparent
310
+ public func fmax( _ x: Float , _ y: Float ) -> Float {
311
+ return . maximum( x, y)
312
+ }
313
+
314
+ #if (arch(i386) || arch(x86_64)) && !os(Windows)
315
+ @_transparent
316
+ public func pow( _ x: Float80 , _ y: Float80 ) -> Float80 {
317
+ return Float80 . pow ( x, y)
318
+ }
319
+
320
+ @available ( swift, deprecated: 5.1 , message: " Use the .nextUp and .nextDown properties. " )
321
+ @_transparent
322
+ public func nextafter( _ x: Float80 , _ y: Float80 ) -> Float80 {
323
+ return y > x ? x. nextUp : ( y < x ? x. nextDown : y)
324
+ }
325
+
326
+ @available ( swift, deprecated: 5.1 , message: " Use Float80.minimum( ) or Swift.min( ) " )
327
+ @_transparent
328
+ public func fmin( _ x: Float80 , _ y: Float80 ) -> Float80 {
329
+ return Float80 . minimum ( x, y)
330
+ }
331
+
332
+ @available ( swift, deprecated: 5.1 , message: " Use Float80.maximum( ) or Swift.max( ) " )
333
+ @_transparent
334
+ public func fmax( _ x: Float80 , _ y: Float80 ) -> Float80 {
335
+ return Float80 . maximum ( x, y)
336
+ }
337
+ #endif
338
+
290
339
% # This is AllFloatTypes not OverlayFloatTypes because of the tuple return .
291
340
% for T, CT, f in AllFloatTypes( ) :
292
341
% if T == 'Float80 ':
@@ -295,11 +344,10 @@ public func ${bfunc}(_ lhs: ${T}, _ rhs: ${T}) -> ${T} {
295
344
// lgamma not available on Windows, apparently?
296
345
#if !os(Windows)
297
346
% end
347
+ @available ( swift, deprecated: 5.1 , message: " Use (logGamma(x), signGamma(x)). " )
298
348
@_transparent
299
349
public func lgamma( _ x: ${ T} ) -> ( ${ T} , Int) {
300
- var sign = Int32 ( 0 )
301
- let value = lgamma ${ f} _r( ${ CT} ( x) , & sign)
302
- return ( ${ T} ( value) , Int ( sign) )
350
+ return ( ${ T} . logGamma ( x) , ${ T} . signGamma ( x) == . plus ? 1 : - 1 )
303
351
}
304
352
#endif
305
353
@@ -326,8 +374,8 @@ public func remquo(_ x: ${T}, _ y: ${T}) -> (${T}, Int) {
326
374
% if T == 'Float80 ':
327
375
#if (arch(i386) || arch(x86_64)) && !os(Windows)
328
376
% end
329
- @available ( swift, deprecated: 4.2 , message:
330
- " use ${T}(nan: ${T}.RawSignificand) instead . " )
377
+ @available ( swift, deprecated: 4.2 , obsoleted : 5.1 , message:
378
+ " use ${T}(nan: ${T}.RawSignificand). " )
331
379
@_transparent
332
380
public func nan( _ tag: String) - > ${ T} {
333
381
return ${ T} ( nan ${ f} ( tag) )
0 commit comments