Цитата(Mad_max @ Apr 6 2010, 02:17)

Как только mas делаю int (соответственно и указатель тоже int), sko отрицательное и корень вычислить нельзя.
Ну дык 1023*1023=1046529, а 16 бит это только 65535. У вас переполнение в операторе возникает, когда массив типа int и соответственно такой же указатель
Цитата(Mad_max @ Apr 6 2010, 02:17)

Код
sumofsq += (*ptr)*(*ptr);
Сделайте явное приведение типа, чтобы именно здесь операция с long выполнялась или введите еще одну переменную этого типа. Кроме того, переменные sumofsq и sum совершенно незачем быть типа float. Лишнее преобразование типов получается. Объявите их как переменные целого типа long.
Код
int mas[NUM_LENGTH];
long sum=0, sumofsq=0, val;
float sko, sigma;
for (int i=0, int *ptr=mas; i<NUM_LENGTH; i++ )
{ val=ptr[i]; //неявное приведение типа
sumofsq += val*val;
sum += val;
}
sko = (float)sumofsq; //явное приведение типа
sko -= (float)((sum)*(sum))/NUM_LENGTH; //здесь операция приведения типа зависит от NUM_LENGTH
sko /= (NUM_LENGTH - 1);
sigma = sqrt(sko);
Как-то так примерно.

При вычислении sko нужно проверить, чтобы произведение sum не превысило разрядности long. Если превышает, то нужно привести с типу float один из сомножителей, а не значение их произведения.