私の質問-パート1:浮動小数点数が(Matlabの)「整数」であるかどうかをテストするための最良の方法は何ですか?
パート1の現在の解決策は明らかに、isinteger
これは値ではなく要素のタイプをテストするためです。したがって、現在、次のような問題を解決しています。
abs(round(X) - X) <= sqrt(eps(X))
しかし、おそらくもっとネイティブなMatlabメソッドがありますか?
私の質問-パート2:私の現在の解決策が本当に最善の方法である場合、推奨される一般的な許容範囲があるかどうか疑問に思いましたか?上からわかるように、私はを使用sqrt(eps(X))
していますが、これには理由がありません。たぶん私はただ使うべきですかeps(X)
、それとも多分5 * eps(X)
?どんな提案でも大歓迎です。
例: Matlabで、sqrt(2)^2 == 2
Falseを返します。しかし実際には、その論理条件がTrueを返すようにしたい場合があります。sqrt(2)^2
実際には等しいので、上記の方法を使用してこれを達成できます2 + eps(2)
(つまり、の許容範囲内ですsqrt(eps(2))
。しかし、これは常に許容範囲として使用する必要があることを意味しますか、またはeps(X)
、などのより大きな許容範囲を使用する正当な理由がありますか?5 * eps(X)
sqrt(eps(X))
更新(2012-10-31): @FakeDIYは、私の質問がこのSO質問の一部と重複していることを指摘しました(申し訳ありませんが、最初の検索でどのように見逃したかわかりません)。これを踏まえて、質問の「許容範囲」の部分(そのリンクではカバーされていません)を強調したいと思います。つまりeps(X)
、賢明な許容範囲です。それとも、のようなもっと大きなものを使用する必要が5 * eps(X)
あります。もしそうなら、なぜですか?
更新(2012-11-01):回答ありがとうございます。質問のさまざまな側面に有意義に貢献していると感じたので、3つすべての回答を+1しました。私はEricPostpischilに回答の目盛りを付けています。その回答は、質問の許容範囲の部分を実際にうまく釘付けにしているからです(そして、現時点で最も多くの賛成を得ています)。