Шаблон Числовой Инструментарий от NIST имеет инструменты для того, чтобы сделать это.
Один из более надежных путей состоит в том, чтобы использовать Разложение четверти .
Вот пример обертки так, чтобы я мог назвать "GetInverse (A, InvA)" в моем коде, и это поместит инверсию в InvA.
void GetInverse(const Array2D& A, Array2D& invA)
{
QR qr(A);
invA = qr.solve(I);
}
Array2D определяется в библиотеке.
В классе NSDate есть метод timeIntervalSinceDate, который решает эту проблему.
NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate];
NSTimeInterval - это двойное число, которое представляет секунды между двумя моментами времени.
Вот мое быстрое решение:
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setDateFormat:@"HH:mm"];
NSDate *date1 = [df dateFromString:@"14:10"];
NSDate *date2 = [df dateFromString:@"18:09"];
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];
int hours = (int)interval / 3600; // integer division to get the hours part
int minutes = (interval - (hours*3600)) / 60; // interval minus hours part (in seconds) divided by 60 yields minutes
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes];
Нет необходимости вычислять это вручную, взгляните на NSCalendar
. Если Вы хотите получить часы и минуты между двумя датами, используйте что-то вроде этого:
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit;
NSDateComponents *components = [gregorianCalendar components:unitFlags
fromDate:firstDate
toDate:otherDate
options:0];
[gregorianCalendar release];
Теперь у Вас есть часы и минуты как у NSDateComponents и Вы можете получить к ним доступ как NSIntegers
как [components hour]
и [components minute]
. Это также будет работать часами между днями, високосными годами и прочими забавными вещами.