Я плохо знаю C, и пытаюсь отредактировать чей-то код, но у меня возникают проблемы при попытке преобразовать значения из журнала в линейные домены.
Например,скажем, у нас есть массив A, который заполнен значениями журнала, равными -100 дБ, т.е.но, взяв среднее в линейной, а не логарифмической области, то есть
float tmp_avg = 0.0;
float avg;
int count = 0;
for( i=0; i<100; i++ ) {
tmp_avg += pow(10.0, A[i]/10.0);
count++;
}
avg = 10*log10(tmp_avg / count);
Тем не менее, я получаю все 0.Теперь код, над которым я работаю, гораздо более сложный, чем этот, но мне было интересно, есть ли что-то очевидное, что я упускаю из-за того, почему это не сработает.
Одна мысль, которая у меня возникла, это то, что 10^ (- 100/10) - это очень небольшое значение (1e-10), и, возможно, оно слишком мало, чтобы его можно было точно определить как число с плавающей точкой.Вместо этого я попытался сделать его двойным, но все равно получаю результат со всеми 0.
Спасибо!