私はGauss EliminatorをCで作成しようとしています。これは時々、行列が数値的に特異であるかどうかをチェックする必要があります。ある数(double)が非常に非常に小さい場合です。ダブルに推奨される最小イプシロンは何ですか?
if(0 == matrix->items[from]){
fprintf(stderr,"Matrix is still singular after attempting pivot. Exitig.\n");
}
これは真になることはありません:
私の問題は、私はこれを行うにしようということ、です。しかし、プログラムを実行しようとすると、このような場合は、それを乗算するかどうか、またはその組み合わせに応じて、infまたはNaNで数値が埋められます。
これらをフィルタリングするために、私はこのような何か必要があります:
#define EPSILON very_small
// rest of the code
if(matrix->items[from] < EPSILON){
...singular
}
をこのEPSILONの推奨値とは何ですか?それは倍精度の絶対精度か、多少大きな値ですか?良いだろうところで、
、上記のようにマクロとしてそれを定義するか、それが好きで使用して:
const double EPSILON = ...;
申し訳ありませんが、私は十分に明確されていないよ場合は、英語が母国語ではありません。
返信いただきありがとうございます。
'if(0 == matrix-> items [from]')と書いてはいけません。本当に醜いです。そして、現代のコンパイラは、あなたが誤って代わりに代入を使用すると文句を言うので、これはもはや「*良い*」の習慣ではありません。 –
正しい値は1つだけです: 'DBL_EPSILON'です。 – Olaf
@Olafなぜそれが唯一の正しい値ですか? – immibis