0

同様の質問があります: Checking whether a variable is an integer or notですが、質問に対する回答がありません。

つまり、私は最近大きな数と戦っていたので、私の友人は私に Python をインストールするように勧めました。今日開いたので、大きな数を計算して精度を高めることができましたが...この精度をどのように使用するのですか? つまり、うまくいくようなpow(31,123)ことをするとうまくいきますが、数値が整数かどうかを確認したい場合は、次のようになります。

>>> (4.00000000000001).is_integer()
False
>>> (4.000000000000001).is_integer()
False
>>> (4.0000000000000001).is_integer()
True
>>> (4.00000000000000001).is_integer()
True

diophantine-equationのいくつかの解を見つける単純なループを書きたかったのですが、非常に大きな数から平方根を取り、それが整数かどうかを確認する必要がありますが、今はピンチです。誰かが私を助けたり、より良い精度を達成するためのアドバイスをくれたりできますか?

例:

例: $ 2x^2 = 1 + y^31 $、x、y は整数です。私のアイデアは、ループを作成することです。ここで、y をインクリメントし (1 から開始)、1 を加算し、2 で割り、平方根を取り、方程式を満たすには整数にする必要があります。これが私がそれを必要とする理由です。

4

3 に答える 3

6

4.0000000000000001float として正確に表すことができません:

>>> format(4.0000000000000001, '.53f')
'4.00000000000000000000000000000000000000000000000000000'

その数は確かに整数です。ほとんどのシステムでは、10 進数で 15 桁を超えることは期待できません。

>>> sys.float_info.dig
15

sys.float_info構造を参照してください。dig属性は次を表します。

float で忠実に表現できる 10 進数の最大桁数

さらに精度が必要な場合は、代わりにdecimalモジュールを使用してください。

于 2014-04-01T12:51:51.827 に答える
1

以下のコードを使用して、指定された数値が整数の 2 乗であるかどうかを確認できます。

def is_square(x):
    s = int(sqrt(x) + 0.5)
    return s * s == x

同様のアプローチは、ディオファントス方程式にも使用できます。指定された x に対して見つかった y を int (y = int(y + 0.5)) に変換し、指定された x と y に対してディオファントス方程式が真かどうかを確認します。

于 2014-04-01T12:54:44.447 に答える