2015-02-15 20 views
40
yılında Float için

Güncel Swift öğrenme max ve Int.max ve Int.min gibi Tamsayı farklı tür dk değerini bulmak için yolları vardır.Nasıl Çift için maksimum değeri bulmak ve Swift

Double ve Float için maksimum değeri bulmanın bir yolu var mı? Ayrıca, bu tür bir soru için hangi belgeyi kullanmalıyım? Şu anda Apple'ın Swift Programlama Dili'u okuyorum. Hiçbir Double.max olmasa da

cevap

52

, bu import Darwin aracılığıyla Swift erişebileceği C float.h başlığında, tanımlanmıştır.

import Darwin 

let fmax = FLT_MAX 
let dmax = DBL_MAX 

Bu kabaca 3.4 * 10^38 ve 1.79 * 10^308 sırasıyla.

Ancak kayan nokta sayılarıyla o kadar basit değil (kayan nokta sayılarıyla asla basit değildir). Bu sayıda tutarak zaman, böylece, çok küçük sayılarla kesinlik kaybetme benzer bir şekilde hassas kaybetmek:

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 

muhtemelen bu sınırların karşı tazelemek olabilecek bazı hesaplamalar girmeden önce Yani, muhtemelen okumalısınız kayan nokta üzerinde. Here ve here muhtemelen iyi bir başlangıçtır. -

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

küçük minimum ve maksimum kullanmayın:

+0

Xcode oyun alanında kodu deneyin ve Float için Double (Çift) ve 340,282,346,638,529,000,000,000,000,000,000,000,000,0 (ve sonsuzluk) elde edin. Neden Double ve Int64’in 64bit’i var, ancak iki katı daha fazla numara kaydedebiliyor? –

+3

Kayan nokta temsilini öğrenmelisiniz. [Wikipedia makalesi] (http://en.wikipedia.org/wiki/Floating_point) ve ayrıca [bu intro] ile başlayın (http://introcs.cs.princeton.edu/java/91float/) –

+0

Teşekkür ederim. çok. Hepsini okuyacağım. –

8

av cevabı gayet ama çok sonunda ben Double.MIN yaptı ve arkadaşları çalışmak, o hatırlamak zor makro ve biraz dışı açık bulduğu bu semboller Swift 3 itibariyle Swift 3.

71

kullanılan, kullanmak gerekir:

CGFloat.greatestFiniteMagnitude 
Double.greatestFiniteMagnitude 
Float.greatestFiniteMagnitude 
+0

Kodunuz Linux ile de ilgileniyorsanız, bu cevaptır. –

2

Sadece

yazın 0:
let mxFloat = MAXFLOAT 

Şamandıradaki maksimum şamandıra değerini elde edersiniz.

+0

Bu, linux üzerinde derlenmeyecek –

İlgili konular