datetime

 
datetime T2 = ( Time[0] + Time[20] ) / 2;

Print ( Time[0], " ", Time[20], " ", T2 );

1167831000 1167813000 -979661648

Почему отрицательный результат ?
 
потому что при сложении этих двух чисел получается значение 2335626000, что >= 2^31, но так как оно представляется в виде 32-х битного значения со знаком, то вместо него будет -1959341296 (2^32 - 2335626000). Т.е. в старшем бите полученного числа будет 1, что означает, что число отрицательное.
Ну и далее при делении его на 2 получается -979661648.
 
Спасибо. Буду оперировать индексами.
 
Можно так
datetime T2 = Time[0]/2 + Time[20] / 2;
 
Браво, babybear !
 
А можно ещё так:
datetime T2 = Time[0] + (Time[20] - Time[0]) / 2;
или так:
datetime T2 = Time[20] - (Time[20] - Time[0]) / 2;
 
Norfolc, ваши варианты вполне приемлемы. Спасибо.

Но при одинаковом результате я предпочла бы иметь меньшее количество слагаемых.
 
Olga_trader, так как время представляется в виде целого числа, то при делении нечётного числа на 2 мы получим погрешность в 0.5, а если оба времени будут нечётными - то погрешность будет уже 0,5 * 2 = 1.
А если с начала из одного вычесть другое число, то тогда этой погрешности не будет.
Т.е. в моём варианте погрешность будет в районе 0 - 0,5, тогда как в варианте babybear-а она может быть 0 - 1. :)
А что лучше иметь - меньшее число слагаемых или большую точность - решать Вам!;)
 
"Не думай о секундах свысока,
Настанет время сам поймёшь наверное?
Стучат они как пули у виска
- мгновения, мгновения, мгновения..."

(копирайт "17 мгновений весны") :o)))))
Причина обращения: