Cをまったく知らず、誰かのコードを編集しようとしていますが、ログから線形ドメインに値を変換しようとすると問題が発生します。
たとえば、-100dBに等しいログ値でいっぱいのアレイAがあるとします。
float A[100];
int i;
for( i=0; i<100; i++ )
A[i] = -100;
私がやりたいのは、すべての値の平均(明らかに-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)であり、フロートとして正確に定義するには小さすぎる可能性があるということです。代わりにdoubleにしようとしましたが、それでもすべて0の結果が得られます。
ありがとう!