Я пишу метод, который вычисляет средний интервал времени между сериями событий (в частности, нажатие кнопок в iPhone).Поскольку число временных интервалов, которые я хочу усреднить, может изменяться в течение жизненного цикла программы, я храню показания времени в объекте с именем tapTimes
типа NSMutableArray
, поэтому мне не нужно беспокоиться об управлении размером массива.
Когда я сохраняю показания времени как удвоения, все работает нормально (для простоты, в следующем примере меня интересует только один интервал времени):
CFAbsoluteTime time = CFAbsoluteTimeGetCurrent();
[tapTimes addObject:[NSNumber numberWithDouble:(double)time]];
[tapTimes removeObjectAtIndex:0];
double deltaT = [[tapTimes objectAtIndex:1] doubleValue] - [[tapTimes objectAtIndex:0] doubleValue];
Что, для постукиваниякаждую секунду или около того, дает (первое значение - только первое чтение, так как массив инициализируется нулями):
deltaT 311721948.947153
deltaT 1.023200
deltaT 1.080004
deltaT 1.055961
deltaT 1.087942
deltaT 1.080074
Однако, если я храню числа с плавающей запятой:
CFAbsoluteTime time = CFAbsoluteTimeGetCurrent();
[tapTimes addObject:[NSNumber numberWithFloat:(float)time]];
[tapTimes removeObjectAtIndex:0];
float deltaT = [[tapTimes objectAtIndex:1] floatValue] - [[tapTimes objectAtIndex:0] floatValue];
Тогда я получаю неожиданные результаты для deltaT
:
deltaT 311721760.000000
deltaT 0.000000
deltaT 0.000000
deltaT 0.000000
deltaT 0.000000
deltaT 32.000000
deltaT 0.000000
deltaT 0.000000
deltaT 0.000000
Есть идеи, что не так?(Я делаю первые шаги в Objective-c / cocoa, поэтому надеюсь, что ответ не слишком тривиален:))