7

特にゼロの場合でも、数値が正か負かをテストしたいと思います。IEEE-754 では が許可-0.0されており、Python で実装されています。

私が見つけた唯一の回避策は次のとおりです。

def test_sign(x):
    return math.copysign(1, x) > 0

そしておそらく(おそらく実行に時間がかかります):

def test_sign(x):
    math.atan2(x, -1)

通常のライブラリのどこにも専用関数が見つかりませんでした。何か見落としていませんか?

編集:(これが関連する理由)

これは私の現在の計画ではありませんが、質問をするときに、引数が正か負かに応じて関数をオーバーロードしようとしました。ユーザーが負のゼロを渡すことができるようにすると、ゼロ値の入力に対する曖昧さが解決されます。そして、これは他のユースケースにも一般的に役立つと思います。

4

2 に答える 2

1

このモジュールを使用してstruct、ビット パターンを直接テストできます。

import struct

def is_neg_zero(n):
    return struct.pack('>d', n) == '\x80\x00\x00\x00\x00\x00\x00\x00'

def is_negative(n):
    return ord(struct.pack('>d', n)[0]) & 0x80 != 0
于 2015-01-30T21:09:33.390 に答える