2015-02-15 32 views

Trả lời

52

Trong khi không có Double.max, nó được xác định trong tiêu đề C float.h, mà bạn có thể truy cập trong Swift qua import Darwin.

import Darwin 

let fmax = FLT_MAX 
let dmax = DBL_MAX 

Đây là khoảng 3.4 * 10^381.79 * 10^308 tương ứng.

Nhưng lưu ý rằng nó không đơn giản như vậy với các số dấu chấm động (nó không bao giờ đơn giản với các số dấu phẩy động). Khi cầm số này lớn, bạn sẽ mất độ chính xác theo một cách giống như việc mất độ chính xác với những con số rất nhỏ, vì vậy:

let d = DBL_MAX 
let e = d - 1.0 
let diff = d - e 
diff == 0.0 // true 

let maxPlusOne = DBL_MAX + 1 
maxPlusOne == d // true 

let inf = DBL_MAX * 2 
// perhaps infinity is the “maximum” 
inf == Double.infinity // true 

Vì vậy, trước khi bạn nhận được vào một số tính toán rằng có thể có thể chải lên chống lại những giới hạn này, có lẽ bạn nên đọc trên điểm nổi. Herehere có lẽ là một khởi đầu tốt. câu trả lời

+0

Tôi đang thử bạn mã trong sân chơi Xcode và nhận được '(+ vô cực)' cho Double và 340,282,346,638,529.000.000.000.000.000.000.000.000.000.0 cho Float. Tại sao Double và Int64 đều có 64bit nhưng double có thể lưu trữ nhiều số hơn? –

+3

Bạn cần tìm hiểu về biểu diễn dấu phẩy động. Bắt đầu với [bài viết wikipedia] (http://en.wikipedia.org/wiki/Floating_point) và cũng có [phần giới thiệu] này (http://introcs.cs.princeton.edu/java/91float/) –

+0

Cảm ơn bạn nhiều. Tôi sẽ đọc tất cả. –

8

AV là tốt, nhưng tôi tìm thấy những macro khó nhớ và một chút không rõ ràng, vì vậy cuối cùng tôi đã Double.MIN và bạn bè làm việc:

extension Double { 
    static var MIN  = -DBL_MAX 
    static var MAX_NEG = -DBL_MIN 
    static var MIN_POS = DBL_MIN 
    static var MAX  = DBL_MAX 
} 

Đừng sử dụng min chữ thường và max - những biểu tượng được sử dụng trong Swift 3.

71

Tính Swift 3, bạn nên sử dụng:

CGFloat.greatestFiniteMagnitude 
Double.greatestFiniteMagnitude 
Float.greatestFiniteMagnitude 
+0

Đây là câu trả lời nếu bạn quan tâm đến việc biên dịch mã của bạn trên Linux. –

2

Just Viết

let mxFloat = MAXFLOAT 

Bạn sẽ nhận được giá trị cực đại của float trong swif.

+0

Điều này sẽ không biên dịch trên linux –

Các vấn đề liên quan