私は現在、値の推定のために浮動小数点数値を強化しています。(これp(k,t)
は: 興味のある人向けです。) 基本的に、このユーティリティはこの値を過小評価することはありません。可能性のある素数生成のセキュリティは、数値的に堅牢な実装に依存します。出力結果は公開された値と一致しますがDBL_EPSILON
、特に除算によって真の値よりも決して小さい結果が得られないようにするために値を使用しました。
検討:double x, y; /* assigned some values... */
評価:r = x / y;
頻繁に発生しますが、これらの (有限精度) 結果は真の結果から有効桁数を切り捨てる場合があります - おそらく無限精度の有理展開です。私は現在、分子にバイアスを適用することでこれを軽減しようとしています。つまり、
r = ((1.0 + DBL_EPSILON) * x) / y;
この主題について何か知っている場合、p(k,t)
通常、ほとんどの見積もりよりもはるかに小さいですが、この「観察」で問題を却下するのに十分ではありません. もちろん、次のように言えます。
(((1.0 + DBL_EPSILON) * x) / y) >= (x / y)
もちろん、「偏った」結果が「正確な」値以上であることを確認する必要があります。操作またはスケーリングに関係していることは確かDBL_EPSILON
ですが、「バイアスされた」結果が「正確な」結果を最小値で超えることは明らかです-IEEE-754算術仮定の下で実証可能です。
はい、Goldberg の論文を調べて、堅牢なソリューションを探しました。丸めモードの操作を提案しないでください。理想的には、浮動小数点定理をよく理解しているか、非常によく説明された例を知っている人からの回答を求めています。
編集:明確にすること、(((1.0 + DBL_EPSILON) * x) / y)
またはフォーム(((1.0 + c) * x) / y)
は前提条件ではありません。これは、確固たる根拠を提供することなく、単に「おそらく十分だ」として使用していたアプローチでした. 分子と分母が特別な値 (NaN、Infs など) になることはなく、分母がゼロになることもありません。