Mentre non c'è il numero Double.max
, è definito nell'intestazione C float.h
, a cui è possibile accedere in Swift tramite import Darwin
.
import Darwin
let fmax = FLT_MAX
let dmax = DBL_MAX
Questi sono approssimativamente 3.4 * 10^38
e 1.79 * 10^308
rispettivamente.
Ma tenete a mente che non è così semplice con i numeri in virgola mobile (non è mai semplice con i numeri in virgola mobile). Quando si tiene numeri questo grande, si perde di precisione in un modo simile a perdere in precisione con numeri molto piccoli, in modo da:
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
Quindi, prima di entrare in alcuni calcoli che potrebbero eventualmente rispolverare contro questi limiti, probabilmente si dovrebbe leggere su in virgola mobile. Here e here sono probabilmente un buon inizio. risposta
fonte
2015-02-15 12:23:19
Sto provando il codice nel parco giochi Xcode e ottieni '(+ infinito)' per Double e 340.282.346.638.529.000.000.000.000.000.000.000.000.000.0 per Float. Perché Double e Int64 hanno entrambi 64 bit ma il doppio può memorizzare più numeri? –
È necessario conoscere la rappresentazione in virgola mobile. Inizia con [articolo wikipedia] (http://en.wikipedia.org/wiki/Floating_point) e anche [questa intro] (http://introcs.cs.princeton.edu/java/91float/) –
Grazie mille tanto. Li leggerò tutti. –