Проблемы с точностью

 
Проблемы с точностью
Уважаемые разработчики, мне кажется что возникла проблема с точностью вычислений:
/*[[
Name := problem
Author := Dmitry
Notes := problem
Separate Window := Yes
First Color := White
First Draw Type := Line
First Symbol := 217
Use Second Data := No
Second Color := Red
Second Draw Type := Line
Second Symbol := 218
]]*/

inputs : DevPeriod( 20 );

Variable : Bar( 0 );
Variable : J( 0 );
Variable : Sum( 0 );
Variable : Sum2( 0 );
Variable : Diff( 0 );
Variable : Deviation( 0 );

SetLoopCount( 0 );

For Bar = Bars / 10 Downto 0 Begin

Sum = 0;
Sum2 = 0;

for J = 0 to DevPeriod begin

Diff = abs( close[ Bar + J ] - close[ Bar + J + 1 ]);

Sum = Sum + Diff;
Sum2 = Sum2 + Diff * Diff;
// Sum2 = Sum2 + Pow( Diff, 2 );

print( Diff, " ", Sum, " ", Sum2 );

end;

Deviation = sqrt(( DevPeriod * Sum2 - Pow( Sum, 2 )) / ( DevPeriod * ( DevPeriod - 1 )));

SetIndexValue( Bar, Deviation );

End;

Если посмотреть на распечатки то видно, что Sum2 часто обращается в ноль - из-за этого данный расчет отклонения работает неверно. Если не ошибаюсь, это происходит из-за потери точности в операции Diff*Diff, то же самое при Pow(Diff,2).
Спасибо
 
мы неоднократно на форуме говорили, что в числа хранятся с двойной точностью! попробуйте пораспечатывать Sum, используя функцию NumberToStr(Sum,8)
 
Спасибо - вы правы, помогло