Ho visto entrambe le varianti che le persone usano ... Solo non so che il float non è sufficiente per iOS5?Memorizzazione delle coordinate dalla posizione principale nei dati principali. Float o Double?
risposta
Un float a 32 bit contiene 7 cifre di precisione, una doppia di 64 bit contiene 15 cifre di precisione.
Con 7 cifre di precisione, la longitudine massima di 179.9999 è accurata solo fino a 0,0001 gradi. Un grado è di circa 60 miglia nautiche, quindi 0,0001 gradi è di circa 10 metri (33 piedi). Se si desidera memorizzare valori lat/lon più precisi, è necessario utilizzare un numero intero doppio o un punto fisso.
In questi giorni non importa molto.
Un double è solo uno slot con valore float che può contenere il doppio della precisione di un float standard. A meno che non lo forziate ad usare un float, il compilatore Objective-c memorizzerà tutti i valori float come un doppio.
I galleggianti e i doppi sono in gran parte resistenti dai vecchi tempi quando la memoria era super stretta. Di questi tempi, di solito li vedi solo quando si tratta di formattazione delle stringhe. È lo stesso con varie dimensioni di int. Tutte le dimensioni sono memorizzate nella dimensione più grande disponibile a meno che non si imponga al compilatore di fare diversamente.
per rispondere che la precisione si ha quando si usano carri o doppio sono venuto su con questa risposta:
caso peggiore precisione quando la memorizzazione dei numeri come decimali per E/W e N/S:
- galleggiante: 1,6955566 metri
- doppio: 3,1582203519064933E-9 metri. (Questo è il 3 nm)
Si può fare i calcoli da soli eseguendo questo in Java:
public class Main {
public static void main(String[] args) {
System.out.println(Math.ulp((float) 180) * 60 * 1852);
System.out.println(Math.ulp((double) 180) * 60 * 1852);
}
}
So che questo è un vecchio thread, ma ho trovato durante la ricerca per il problema. Float è probabilmente sufficiente per la maggior parte delle applicazioni. Il GPS del dispositivo Apple in questione probabilmente non ha una precisione migliore di quella. Ma è più semplice archiviare i doppi fintanto che i dati non sono un problema.
Recentemente, penso che sia solo più facile da memorizzare coordinare in Core Data come NSValue
in attributo trasformabile:
[NSValue valueWithMKCoordinate:coordinate]
Ho appena realizzato che ho anche bisogno di fare Pitagora con il più grande errore nel altra direzione anche. Quindi un po 'peggio. :) – Gussoh