На этой строке:
num_bytes_read = fread(ptr,1,pcm_sample_size,fptr);//read one sample
ptr указывает на адрес значения, поэтому он должен быть sizeof(double)
и 1, поскольку вы читаете только одно значение.
Результатом фреда является количество прочитанных элементов, а не количество байтов.
Вы инициализируете sum_sq
, где вам нужно?
Чтобы прочитать 2 двойных:
double readbuf[2];
num_items_read = fread( readbuf, sizeof(double), 2, fptr );
if( num_items_read == 2 )
{
covariance_sum += readbuf[0] * readbuf[1];
}
Не уверен, что именно вы пытаетесь умножить, но, очевидно, если это 2 разных значения, это не "квадрат". Я позволю вам исправить ваш код в соответствии с вашей реальной логикой.