Вычитание 2 разных двойных значений дает ноль - PullRequest
1 голос
/ 25 марта 2011

Я создаю приложение на основе loc, используя CLLocationManager и locationManager: didUpdateToLocation: fromLocation: я пытаюсь определить, достаточно ли пользователь переместился, чтобы вызвать какую-то другую обработку.Я использую двойные переменные.Я давно научился не приравнивать двойники, а сравнивать дельту с порогом.Я сравниваю abs (старый - новый) с дельтой 0.0005f

Но этот код ...

    double latDelta = abs(theConsumer.latLong.clLocation.coordinate.latitude  - newLocation.coordinate.latitude);
    double lonDelta = abs(theConsumer.latLong.clLocation.coordinate.longitude - newLocation.coordinate.longitude);

    NSString *fooBar = [NSString stringWithFormat: 
           @"???Delta LAT: abs(current (%f) - new (%f)) = delta %f.",
           theConsumer.latLong.clLocation.coordinate.latitude,
           newLocation.coordinate.latitude,
           latDelta];

дает такой вывод: дельта равна нулю.

GPSLogger.m: (26)> GPSLOG: GPS: 39.4425- Север, 77.8132- Западный / n MeterAccuracyFormat 0

GPSLogger.m: (26)> GPSLOG: Найдены новые координаты: Лат: 39.442494 Длина: -77.813175DataModel.m: (197)> DistanceFromLoc: 710.517020 DataModel.m: (199)> Получена дельта> 0,000500 DataModel.m: (214)> Дельта LAT: abs (текущий (39.440120) - новый (39.442494)) = дельта 0.000000.

Числа переполнены?Есть ли лучший способ сделать это (то есть тот, который работает)?

Спасибо.

1 Ответ

3 голосов
/ 25 марта 2011

abs() возвращает int; Вы хотите fabs().

(Вы также можете использовать макрос ABS() в iOS / OS X, который возвращает значение, тип которого является типом аргумента.)

...