質問: intersect(c,d,'stable') 上記の場合は,dの中のcと一致するものを見つけ出したいのですが, icに20個の分のインデックスが返ってくるはずが17個しか見つかりません. c及びdには同じ数値が入っていることは確認済みです. ismemberやfind関数でも同様になってしまいます. この問題の回避方法はないでしょうか? 宜しくお願い致します。 <> <>
回答: 1.175に見えるデータの内部表現を16進表現で見てみると >> format hex >> c(16) ans = 3ff2cccccccccccd >> d(36) ans = 3ff2cccccccccccc となっており、厳密には同一ではありません。 >> c(16) == d(36) ans = logical 0 コロン関数では数値演算を行なって要素を計算していますので、浮動小数点での比較は危険です。今の場合、これを回避する一つの方法は、数値をstring型にして文字列で比較することです。 [gg,ic,id] = intersect(string(c),string(d),'stable') gg = 1×20 の string 配列 しかし、cやdのデータがより一般的な浮動小数点データの場合、文字列に変換して比較するのではなく、誤差を計算した上で、許容範囲を設定し、その範囲内で一致するものを抜き出すようにした方が良いかと思います。