2017-02-03 6 views
0

2つの浮動小数点数の差が1以下であるかどうかを調べる方法は?1つのULP内の2つの浮動小数点数をテストする

(サインと指数を無視し、)以下のコードのようなもの、仮数のバイナリを抽出し、やや少ないひどい:

a = int(<float>.hex().lstrip('-').lstrip('0x')[1:].lstrip('.')[:-3].rstrip('+').rstrip('p'), 16) 
b = int(<float>.hex().lstrip('-').lstrip('0x')[1:].lstrip('.')[:-3].rstrip('+').rstrip('p'), 16) 
print abs(a - b) <= 1 

答えて

1

numpyのを使用すると、次の浮動小数点数を取得することができます与えられた数の後:

# Test whether taking the smallest possible step from b in the direction of a gets you a. 
# Special case: If b == a, then np.nextafter(b, a) == a 
a == np.nextafter(b, a) 

(、たとえば、二つの数が異なるのULPを持っている場合、または1つが無限大である場合、これは非常にあなたが望むものではないかもしれません。)

+0

なぜそれが問題になり、 「2つのn umbersは異なるULPを持っていますか?そしてお返事ありがとうございますが、私はNumPyではなくPython stdlibだけを使用したいと考えています。 –

+0

@EcirHana:aとbが互いにa-ULP内にあり、お互いに、何が起こるはずですか?このチェックはFalseを返します。あなたはそれを望んでいないかもしれません。 – user2357112

+0

私は参照してください。その場合、私の質問は間違っていて、あなたの答えは正しいです:)。 –

関連する問題