Цитата(smalcom @ Mar 1 2014, 11:35)

>> Power = (REAL64)p1-(REAL64)p2;
так верно
Спасибо!
У меня выходило, что этот вариант не всегда прокатывал.
В программе p1, p2 могут принимать значения в диапазоне от 50000 до нескольких десятков миллионов. Тут такое приведение типов срабатывало.
При тестировании взял такие значения: p1 = 800000000000000000, p2 = 800000000000000001. Тогда работает вариант
Код
UINT64 t = p[0]-p[1];
Power = (REAL64)((SINT64)t);
, а в первом случае ошибка.
Теперь понял, что так получалось из-за того, что в примере было больше 16 значащих десятичных цифр.
Цитата(DpInRock @ Mar 1 2014, 11:50)

Изначально неверно использовать UINT для арифметических операций со знаком. Экономия одного бита при 64 разрядах вряд ли оправдана.
Согласен. Что досталось, с тем и пришлось работать...