0

なぜこの結果が得られるのかわからないため、この質問を投稿することにしました。私はこのサイトで調査し、他のサイトでは解決策が見つかりませんでした。このウェブサイトのルールに違反している場合は申し訳ありませんが、覚えておいてください。私は初心者です。これは、予期しない結果を返す C で記述された関数のコードです。

double gauss (double average, double variance, int data)
    {
    double model,power;
    power = ((((data-average)*(data-average))/(2*variance))*(1));
    model = (pow(E,(int)power));
    return 1.0/model;
    }

残りのコードを投稿する必要があるかどうかはわかりませんが、必要に応じて投稿します。投稿を短くしたかっただけです。モデルは非常に大きな数であるため、問題は 1.0/モデルで発生しています。

4

3 に答える 3

0

C の double は精度が限られているため、1.0 を非常に大きな double で除算すると、精度誤差は 0 になります (事実上、実際の答えはゼロに非常に近いため、精度誤差はゼロに丸められます)。

より精度の高いものを使用することもできますが、 GMPlong doubleのような任意精度のライブラリを使用する方がよいと思います。

于 2013-07-11T00:12:52.600 に答える