2

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の結果が得られます。

ありがとう!

4

1 に答える 1

0

問題が何であるかを理解したばかりです。プログラムの先頭にmath.hライブラリを含める必要がありました。

#include <math.h>

それがなければ、log10関数への参照がなかったと思います。その結果、結果はすべて0になりました。math.hを含めましたが、すべて正常に機能しているようです。

于 2012-01-17T20:33:34.137 に答える